相同的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>
正如你可以看到$ {任务id}正在打印4ef99b730364de7ec70dbd68
然后4ef99b6c0364de7ec70dbd67
,这对我没有意义,我需要$ {taskId}打印出相同的值4ef99b730364de7ec70dbd68
是正确的。
是否有一些已知问题可能导致此问题。
编辑:真正的问题是隐藏窗体标记中的$ {taskId}不正确,我打印另一个值来查看表达式包含的内容,然后发现它在不同位置有所不同 - 这使得事物严重混淆。
的ActionBean代码:
@UrlBinding("/")
public class TaskActionBean extends BaseActionBean{
String taskId;
Task task = new Task();
List<Task> tasks;
public final static String DISPLAY = "/index.jsp";
@DefaultHandler
public Resolution listTasks(){
tasks = Dao.datastore().find(Task.class).order("rank").asList();
return new ForwardResolution(DISPLAY);
}
public Resolution promoteTask(){
task.promoteTask();
tasks = Dao.datastore().find(Task.class).order("rank").asList();
return new ForwardResolution(DISPLAY);
}
// ... getters and setters
该代码片段化,我不认为其他代码是相关的,但如果这是不够的,我可以包括更多。 – Ankur 2011-12-27 11:08:58
发布您的动作bean代码。 – soulcheck 2011-12-27 11:30:34
目前我已经通过使用对象解决了这个问题,但是如果有人知道,我仍然很想理解这里发生了什么。 –
Ankur
2011-12-27 11:33:45