Заполните поля после перенаправления в стойках 2 - PullRequest
2 голосов
/ 05 июля 2011

Я пытаюсь понять, есть ли самый простой и короткий способ заполнить поля формы, после того, как она не прошла проверку и перенаправлена ​​(следуя описанной здесь схеме ).

У меня есть форма, которая вызывается из действия addPerson.action, а действие отправки - savePerson.action.Если проверка не пройдена, я перенаправляю все параметры, чтобы перенаправленная страница заполняла поля данными, вставленными пользователем, чтобы пользователю не пришлось начинать с нуля.Проблема этого решения состоит в том, что мне нужно перечислить каждый отдельный параметр формы в struts.xml, как в примере ниже:

<action name="savePerson" class="personAction" method="savePerson">
        <interceptor-ref name="store">
            <param name="operationMode">STORE</param>
        </interceptor-ref>
        <interceptor-ref name="myStack" />
        <result name="success" type="redirectAction">
            <param name="actionName">listPeople</param>
        </result>
        <result name="input" type="redirectAction">
            <param name="actionName">addPerson</param>
            <param name="parse">true</param>
            <param name="person.name">${person.name}</param>
            <param name="person.surname">${person.surname}</param>
            <param name="person.gender">${person.gender}</param>
            <param name="person.email">${person.email}</param>
            <param name="person.mobile">${person.mobile}</param>
        </result>
    </action>
    <action name="addPerson" class="personAction" method="addPerson">
        <interceptor-ref name="store">
            <param name="operationMode">RETRIEVE</param>
        </interceptor-ref>
        <interceptor-ref name="myStack" />
        <result name="success">/person/add.jsp</result>
        <result name="input">/person/add.jsp</result>
    </action>

Мне пришлось использовать MessageStoreInterceptor для сохранения и получениясообщения об ошибках валидации от перенаправления.

Я уже использую валидацию ajax, но я хочу, чтобы мои страницы также работали в режиме не javascript.С кодом выше все работает как положено, но выглядит странно, что я должен перечислить все свои параметры в теге результата.

Есть ли лучший и более короткий способ сделать это?спасибо

1 Ответ

0 голосов
/ 06 июля 2011

При переадресации, с которой вы начинаете все сначала, вы выбрасываете стек значений, за исключением параметров, которые вы явно передаете. То, что вам, вероятно, нужно, это цепочка, которая увеличивает объем стека в виде снежного кома.

Смотрите здесь список типов результатов, ссылка на Chain имеет несколько примеров: http://struts.apache.org/2.2.1.1/docs/result-types.html

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

См. Комментарий NMC. Это то, что я делаю тоже, не очень хорошая идея использовать цепочку или redirectAction ... создает действия спагетти.

...