你能解释一下Struts2 Web应用程序会发生什么吗?

时间:2014-08-28 18:46:48

标签: java web-applications struts2 action ognl

动作类

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;应该。

1 个答案:

答案 0 :(得分:1)

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

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