Spring MVC - 使用Javascript设置actionURL参数

时间:2010-04-21 18:44:24

标签: javascript forms spring-mvc portlet

是否可以使用javascript动态设置Spring MVC portlet:actionURL portlet:param?我已尝试使用以下代码,但id值始终作为null传递给控制器​​。我已经验证设置portlet:param手动正确传递值:

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

我还验证了正确设置javascript中的值并且不为null。

(注意:我已经更改了原始代码中的变量名等,以简化它并对其进行模糊处理,因为这是我雇主的代码。)

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:

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 :(得分:0)

一位同事发现了这一点。看起来您只需将参数添加到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:

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

答案 1 :(得分:0)

我差不多3年后才发现这个问题,但我发现添加隐藏的表单字段更容易,单击操作时将此值设置为隐藏字段

类似

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

和javascript代码

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

}

答案 2 :(得分:0)

portlet标记生成的URL位于服务器端。 Javascript没有看到portlet标记。它只能看到实际的URL。你的同事建议会起作用,但这不是一个好方法。在这里,他只是将动态参数添加为查询字符串参数,使其对目标门户页面上的所有portlet可见。更好的解决方案是保留隐藏元素(文本框或其他内容),并在onSubmit Javascript hander函数中将动态值设置为此隐藏元素。