2010-04-21 67 views
1

是否可以动态设置Spring MVC portlet:actionURL portlet:param using javascript?我尝试了下面的代码,但id值总是作为null传递给控制器​​。我已验证设置的portlet:手动PARAM正确传递值:Spring MVC - 用Javascript设置actionURL参数

<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) { 
.... 

回答

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(); 
} 
0

我碰到这个来到近3年后的今天,我仍然发现它更容易添加一个隐藏表单域和点击动作时比将该值设置为隐藏字段

类似于

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

和JavaScript代码

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

} 
0

由portlet标记中生成的URL是在服务器侧。 Javascript没有看到portlet标签。它只能看到实际的URL。你的同事提出的建议可行,但这不是一个好方法。在这里,他只是将动态参数添加为查询字符串参数,从而使其对目标门户网站页面上的所有portlet都可见。更好的解决方案是在你的onSubmit Javascript hander函数中保留一个隐藏的元素(文本框或其他东西)并将动态值设置为隐藏元素。