Struts2 OGNL выражение времени выполнения - PullRequest
0 голосов
/ 10 февраля 2012

Я проверяю список объектов. Чтобы показать пользователям, что они набрали неправильно, мне нужно заполнить поля при ошибке преобразования. Я прочитал, что для повторного заполнения значения полей на странице мне нужно сделать что-то вроде этого:

<s:textfield name="user.name" value="%{user.name}"/>

Для повторного заполнения массива я должен ссылаться на них через индексы. Как уже упоминалось здесь: обновить список значений в текстовом поле в структурах2

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

<s:set name="counter" value="0"/>
<s:iterator value="users" var="user">
   <s:textfield name="users[%{#counter}].birthdate" value="%{users[#counter].birthdate}"/>
   <s:set name="counter" value ="%{#counter + 1}"/>
</s:iterator>

Я использую валидатор посетителя для объекта User.

<field name="birthdate">
    <field-validator type="conversion">
        <param name="repopulateField">true</param>
            <message>${getText("E011", {"birthdate"})}</message>
    </field-validator>
</field>

Как я уже сказал, я не использую счетчик индекса итератора по определенной причине.

Проблема в том, что эта value="%{users[#counter].birthdate}" часть не работает. Если я изменю значение counter на 0, оно заполняет значение users [0] .birthdate right. Похоже, он не получает значение counter в выражении OGNL.

Я пытался с:

value="%{users[counter].birthdate}"
value="%{users[%{#counter}].birthdate}"
...
and so on.

Может кто-нибудь помочь мне сделать эту работу?

UPDATE

В итоге я должен был упомянуть мой особый случай:

<s:iterator value="users" var="user" status="status">
  <s:if test="#status.index != removeIndex">

Я обнаружил, что мне не нужно указывать значение для имени поля, чтобы оно заполняло значения. Но мне нужно было использовать это из-за этой строки:

<s:if test="#status.index != removeIndex">

Потребуется много моих английских усилий, чтобы объяснить, почему вы, ребята, не поняли меня. Можем ли мы удалить этот пост? Спасибо

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

Лучше, если вы спросите, как что-то сделать ... вместо того, чтобы сказать, что у вас есть причина сделать это таким образом и, конечно, этот способ не работает. Это вызывает у меня головную боль ...

Я не понимаю этого ...

<s:set name="counter" value="0"/>
<s:iterator value="users" var="user">
   <s:textfield name="users[%{#counter}].birthdate" value="{users[counter].birthdate}"/>
   <s:set name="counter" value ="%{#counter + 1}"/>
</s:iterator>

Я перепишу (без тестирования) то, что, я думаю, вы имеете в виду ...

<s:iterator value="users">
   <s:textfield name="users.birthdate" value="birthdate"/>
</s:iterator>

Вышеприведенное требует, чтобы выполнялись следующие условия ... a) что «users» - это список типа «User», и b) что инфраструктуре преобразования struts2 было сказано, что users - это список типа «User» что так же просто, как добавить аннотацию примерно так: http://struts.apache.org/2.3.1.2/docs/keyproperty-annotation.html

При соблюдении этих условий ... Отправляйте как можно больше за один раз без необходимости использования записи массива, и вы сможете заполнить поля.

Теперь, почему вы ожидаете повторного заполнения значений формы после того, как она не будет отправлена? То есть, как вы используете проверку? Если по какой-то причине вы этого не сделали, вы создали какое-то сопоставление действий для значения INPUT или ERROR, чтобы перенаправить обратно на страницу ввода (что является пустой тратой усилий, когда существует структура проверки).

0 голосов
/ 10 февраля 2012

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

<s:set name="counter" value="0"/>
<s:iterator value="users" var="user">
  <s:textfield name="users[#counter].birthdate" value="%{users[#counter].birthdate}"/>
  <s:set name="counter" value ="%{#counter + 1}"/>
</s:iterator>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...