是否可以使用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) {
....
答案 0 :(得分:0)
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ña" onclick="setAction('terminate');">
和javascript代码
function setAction(action){
$("#actionToDo").val(action);
}
答案 2 :(得分:0)
portlet标记生成的URL位于服务器端。 Javascript没有看到portlet标记。它只能看到实际的URL。你的同事建议会起作用,但这不是一个好方法。在这里,他只是将动态参数添加为查询字符串参数,使其对目标门户页面上的所有portlet可见。更好的解决方案是保留隐藏元素(文本框或其他内容),并在onSubmit Javascript hander函数中将动态值设置为此隐藏元素。