Класс действия
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"/>
...
Почему hidden fild содержит value = "0", оно должно быть значением = "1"? Это происходит, если первая страница была присоединена к странице. В следующий раз это скрытое значение соответствует var = "level", как должно.
Поскольку значение заполняется из атрибута name
скрытого поля, связанного с атрибутом action int
который содержит значение 0
. У вас нет значения в атрибуте value
потому что ваше выражение ничего не возвращает, т.е. не имеет level
в стеке значений.
Вот как это работает: тег считывает значение из атрибута value
и, если он имеет значение null
он использует значение из атрибута name
как выражение OGNL. После того, как выражение оценивается, возвращаемое значение передается атрибуту value
input
тега.
submitPage
наsubmitPage
вам значение.