2014-08-28 79 views
1

一个Action类你能解释一下Struts2 web应用程序会发生什么吗?

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页面

<% 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包含值=“0”,它必须是值=“1”?如果第一次接受页面,会发生这种情况。下一次隐藏的值应该与var =“level”相对应。

+0

不完全确定,但也不知道为什么你不只是'submitPage'设置为你想要的值。 – 2014-08-28 18:54:44

+0

因为如果我理解正确的话,我必须仅通过表单提交将价值发送到操作类。 – andy007 2014-08-28 19:02:56

+0

你不明白;如果您通过一个动作(您应该)将动作属性作为表单值使用,那么这就是Struts 2视图层背后的概念。 – 2014-08-28 19:09:27

回答

1

因为该值是从隐藏字段name填充的属性绑定到操作的int属性,该属性包含0值。您在value属性中没有值,因为您的表达式不会返回任何值,即在值堆栈中没有level

它是如何工作的:标签读取value属性的值,如果它的值为null,则它使用name属性中的值作为OGNL表达式。评估表达式后,返回的值将呈现给input标记的value属性。

相关问题