Я проверяю список объектов. Чтобы показать пользователям, что они набрали неправильно, мне нужно заполнить поля при ошибке преобразования. Я прочитал, что для повторного заполнения значения полей на странице мне нужно сделать что-то вроде этого:
<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">
Потребуется много моих английских усилий, чтобы объяснить, почему вы, ребята, не поняли меня. Можем ли мы удалить этот пост? Спасибо