表达式语言行为不一致,同样表达不同的值

时间:2011-12-27 11:07:45

标签: java jsp el

相同的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

1 个答案:

答案 0 :(得分:0)

你的动作bean中有一个taskId字段,根据stripes taglib documentation

  

隐藏标记通过按以下顺序扫描来指定值属性:

     
      
  1. 在HttpServletRequest中具有相同名称的一个或多个值

  2.   
  3. 表示ActionBean上具有相同名称的字段(如果存在bean实例)

  4.   
  5. 通过将正文内容折叠为字符串(如果正文存在)

  6.   
  7. 引用标记的value属性中包含的EL表达式的结果。

  8.   

因此它可能会在您的action bean中找到该字段并从中获取值。

从任务列表元素中分配另一个(jsp el)${taskId}

taskId更改为与您的操作bean字段不一致的某个名称,它应该可以正常工作。