相同的EL表达式${taskId}
在不同的位置给出了两个不同的值。
我正在使用Stripes框架,以及用于对象映射的MongoDB和Morphia(当然还有Java / JSP /等)。
使用以下JSP /表达式语言代码:
<c:forEach items="${actionBean.tasks}" var="listTask">
<c:set var="taskId" scope="page" value="${listTask.id}"/>
<s:form method="post" beanclass="action.TaskActionBean">
${taskId}<s:hidden name="task.id" value="${taskId}"/>
<s:submit name="promoteTask" value="Up" />
</s:form>
</c:forEach>
提供以下生成的代码:
<form method="post" action="/scrumyogi/">
4ef99b730364de7ec70dbd68
<input type="hidden" value="4ef99b6c0364de7ec70dbd67" name="task.id">
<input type="submit" value="Up" name="promoteTask">
<div style="display: none;">
<input type="hidden" value="NPNEJw6tUWfRBXf-vVOLTw==" name="_sourcePage">
<input type="hidden" value="XbfUDiSHGrU=" name="__fp">
</div>
</form>
正如您所看到的,$ {taskId}打印出4ef99b730364de7ec70dbd68
然后打印4ef99b6c0364de7ec70dbd67
,这对我来说毫无意义,我需要$ {taskId}来打印相同的值{{1}是正确的。
是否存在可能导致此问题的已知问题。
编辑:真正的问题是隐藏的表单标签中的$ {taskId}是不正确的,我打印了另一个值来查看表达式包含的内容,然后发现它在不同的位置有所不同 - 这让事情变得严肃混乱。ActionBean代码:
4ef99b730364de7ec70dbd68
答案 0 :(得分:0)
你的动作bean中有一个taskId
字段,根据stripes taglib documentation:
隐藏标记通过按以下顺序扫描来指定值属性:
在HttpServletRequest中具有相同名称的一个或多个值
表示ActionBean上具有相同名称的字段(如果存在bean实例)
通过将正文内容折叠为字符串(如果正文存在)
- 醇>
引用标记的value属性中包含的EL表达式的结果。
因此它可能会在您的action bean中找到该字段并从中获取值。
从任务列表元素中分配另一个(jsp el)${taskId}
。
将taskId
更改为与您的操作bean字段不一致的某个名称,它应该可以正常工作。