Не могли бы вы объяснить, что происходит с веб-приложением Struts2?

1

Класс действия

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", как должно.

  • 0
    Не совсем уверен, но также не уверен, почему вы не просто установите submitPage на submitPage вам значение.
  • 0
    Потому что я должен отправлять значение в класс действий только с формой отправки, если я правильно понимаю.
Показать ещё 3 комментария
Теги:
web-applications
struts2
action
ognl

1 ответ

1
Лучший ответ

Поскольку значение заполняется из атрибута name скрытого поля, связанного с атрибутом action int который содержит значение 0. У вас нет значения в атрибуте value потому что ваше выражение ничего не возвращает, т.е. не имеет level в стеке значений.

Вот как это работает: тег считывает значение из атрибута value и, если он имеет значение null он использует значение из атрибута name как выражение OGNL. После того, как выражение оценивается, возвращаемое значение передается атрибуту value input тега.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню