Установка переменной в сеансе при нажатии кнопки «Отправить» в Struts - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть итератор, который просматривает список и создает их имя и для каждого из них кнопку. Я хочу, чтобы когда пользователь нажимал на кнопку, ставил то же имя, которое было нажато в сеансе Это мой код

        <s:iterator value="packageCities" status="portStatus">
            <tr>
                <td>
                    <s:property value="cityName" />
                </td>
            </tr>
            <s:if test="%{status == 0}">
                <tr>
                    <td>
                        <s:submit method="open"  align="center" value="" cssStyle="background: transparent url(image/open.png) no-repeat center top; border: 0px; width: 150px; height: 30px;" >
                            <s:set name="button" value="cityName" scope="session"/>
                        </s:submit>
                    </td>
                </tr>
            </s:if>
        </s:iterator>

Но проблема в том, что он устанавливает только последнее свойство, и не устанавливает его, когда пользователь нажимает кнопку! поэтому, когда он создает кнопку, он помещает cityName в сеанс! Но я хочу, чтобы в сеансе было другое дело, нажимая разные кнопки! Может ли тело помочь?

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Существует два решения:

  1. Отправьте значение вместе с формой (для этой цели может использоваться скрытое поле).Затем установите переменную сеанса в классе действий.
  2. Сделайте синхронный запрос Ajax, чтобы установить значение сеанса по нажатию кнопок отправки.

Как Dave упомянутыйкогда jsp загружен, значения уже установлены, вы не можете изменить их со стороны клиента.

РЕДАКТИРОВАТЬ

Хорошо, как вы и просили, вот основная идеяПервый способ.Идея состоит в том, чтобы установить идентификатор кнопки отправки с соответствующим cityName, а затем по нажатию кнопки вызвать функцию javascript, чтобы установить значение скрытого поля с идентификатором нажатой кнопки (т. Е. cityName)

<s:form>
<s:hidden id="value_to_submit" name="value_to_submit"/>
<s:iterator value="packageCities" status="portStatus"><s:form>
    ....
                <s:if test="%{status == 0}">
                    <tr>
                        <td>
                            <s:submit id="%{cityName}" onclick="set_hidden_value(this.id)" method="open"  align="center" value="" cssStyle="background: transparent url(image/open.png) no-repeat center top; border: 0px; width: 150px; height: 30px;" >
                            </s:submit>
                        </td>
                    </tr>
                </s:if>

    </s:iterator>
</s:form>

Javascript

function set_hidden_value(myvalue){
document.getElementById("value_to_submit").value=myvalue;
}

Теперь вы можете захватить значение переменной value_to_submit в вашем классе действий и установить там переменную сеанса.

0 голосов
/ 15 декабря 2011

Два вопроса.

Один, имя всегда одинаковое, поэтому вы всегда устанавливаете одно и то же свойство.

Два, и что более важно, JSP выполнил весь JSPтеги к тому времени, когда он попадает в браузер - это не то, как вы устанавливаете переменную сеанса нажатием кнопки.

Переменная сеанса должна быть установлена ​​в действии, обрабатывающем отправку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...