动作类
public class IndexAction extends ActionSupport implements SessionAware {
private int submitPage;
//getter-setter
方法
public String execute() {
// this means that session is NEW
if(!session.containsKey("progres")) {
System.out.println("NEW session");
System.out.println("level " + 1);
session.put("level", 1);
return SUCCESS;
}
jsp page
<% Integer level = (Integer)session.getAttribute("level"); %>
<c:set var="level" scope="request" value='<%=session.getAttribute("level")%>' />
<!--<c:out value="Level: ${level}"/>-->
<h2>Task <c:out value="${level}"/></h2>
<s:form action="index">
<s:hidden name="submitPage" value="%{level}" />
...
当我第一次访问此页面时,它会转到此
<!--Level: 1-->
<h2>Task 1.</h2>
<form id="index" name="index" action="/Struts2HiberQuize_2/index.action" method="post">
<table class="wwFormTable">
<input type="hidden" name="submitPage" value="0" id="index_submitPage"/>
...
为什么隐藏的fild包含value =&#34; 0&#34;,它必须是value =&#34; 1&#34; ?如果首次登录页面,则会发生这种情况。接下来,该隐藏值对应于var =&#34; level&#34;应该。
答案 0 :(得分:1)
因为该值是从隐藏字段name
属性填充的,该属性绑定到包含int
值的操作0
属性。您在value
属性中没有值,因为您的表达式没有返回任何值,即在值堆栈中没有level
。
它是如何工作的:标记从value
属性中读取值,如果它是null
,则它使用name
属性中的值作为OGNL表达式。在计算表达式后,返回的值呈现为value
标记的input
属性。