Spring MVC - Установите параметр actionURL с помощью Javascript - PullRequest
1 голос
/ 21 апреля 2010

Можно ли динамически установить портлет Spring MVC: actionURL portlet: param, используя javascript? Я попытался с помощью следующего кода, но значение идентификатора всегда сталкивается как ноль для контроллера. Я убедился, что при настройке portlet: param вручную правильно передается значение:

<portlet:param name="id" value="2" />

Я также проверил, что значение в javascript установлено правильно и не является нулевым.

(Примечание. Я изменил имена переменных и т. Д. По сравнению с исходным кодом, чтобы упростить его и скрыть, поскольку это код моего работодателя.)

JSP:

<portlet:actionURL var="modifyURL">
    <portlet:param name="do" value="modify" />
    <portlet:param name="id" value="${model.id}" />
</portlet:actionURL>

...

<form:form action="${modifyURL}" id="modifyForm" modelAttribute="model">
    <form:hidden path="id" id="id" />
</form:form>

Javascript вызывается при нажатии на URL обновления:

function update() {
    document.forms[0]["id"].value = selectedId;
    document.forms[0].submit();
}

Контроллер:

@RequestMapping(params = {"do=modify"})
public void modify(@ModelAttribute("model") Model model, 
    @RequestParam(value = "id", required=true) Long id,
    ActionRequest request, ActionResponse response,
    SessionStatus sessionStatus, ModelMap modelMap)  {
....

Ответы [ 3 ]

0 голосов
/ 01 октября 2013

Я столкнулся с этим почти 3 года спустя, но мне все же было проще добавить скрытое поле формы, и когда щелкнуло действие, чем установить это значение в скрытое поле

что-то вроде

 <input type="submit" id="btn_terminate_cmpn"
                value="Terminar campa&ntilde;a" onclick="setAction('terminate');">

и код JavaScript

function setAction(action){
    $("#actionToDo").val(action);

}
0 голосов
/ 09 февраля 2016

URL-адрес, созданный тегом портлета, находится на стороне сервера. Javascript не видит тег портлета. Он видит только фактический URL. То, что предлагает ваш коллега, сработает, но это не очень хороший подход. Здесь он просто добавляет динамический параметр в качестве параметра строки запроса, который делает его видимым для всех портлетов на целевой странице портала. Лучшее решение - сохранить скрытый элемент (текстовое поле или что-то в этом роде) и установить динамическое значение для этого скрытого элемента в вашей функции поддержки onSubmit Javascript.

0 голосов
/ 22 апреля 2010

Сотрудник понял это. Похоже, что вам просто нужно добавить параметр к действию в JavaScript и не включать его в actionURL или форму.

JSP:

<portlet:actionURL var="modifyURL">
    <portlet:param name="do" value="modify" />
</portlet:actionURL>

...

<form:form action="${modifyURL}" id="modifyForm" modelAttribute="model" method="POST">
</form:form>

Javascript вызывается при нажатии на URL обновления:

function update() {
    $("modifyForm").action = '${modifyURL}&id='+selectedId;
    $("modifyForm").submit();
}
...