Параметры между действиями Struts2 - PullRequest
0 голосов
/ 13 сентября 2011

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

Первый:

    <action
        name="add-item"
        method="addItem"
        class="com.deveto.struts.actions.ItemsAction" >
        <interceptor-ref name="defaultStack"/>
        <result name="success" type="redirectAction">
            <param name="actionName">show-update-item</param>
            <param name="itemId">${itemId}</param>
        </result>
    </action>

Второй:

    With an Action variable and setter & getter methods.

и

    <action
        name="add-item"
        method="addItem"
        class="com.deveto.struts.actions.ItemsAction" >
        <interceptor-ref name="defaultStack"/>
        <result name="success" type="redirectAction">show-update-item</result>
    </action>

Третий:

    With request.setAttribute("itemId", itemId); and request.getAttribute("itemId");

и

    <action
        name="add-item"
        method="addItem"
        class="com.deveto.struts.actions.ItemsAction" >
        <interceptor-ref name="defaultStack"/>
        <result name="success" type="redirectAction">show-update-item</result>
    </action>

Четвертый:

    With an Action variable and setter & getter methods.

и type = "chain"

    <action
        name="add-item"
        method="addItem"
        class="com.deveto.struts.actions.ItemsAction" >
        <interceptor-ref name="defaultStack"/>
        <result name="success" type="chain">show-update-item</result>
    </action>

В конечном итоге действие становится единым, show-update-item.action.

Но все это дает мне тот же нольрезультат.

Любые советы?

Пример: show-update-item.action? itemId = 33 (getParameter of itemId) -> редактирование некоторых текстовых полей -> submit (с itemId =33 в запросе) -> на успехе redirectAction -> show-update-item.action (здесь, когда я пытаюсь получить атрибут, он нулевой)

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

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

<action
    name="add-item"
    method="addItem"
    class="com.deveto.struts.actions.ItemsAction" >
    <interceptor-ref name="defaultStack"/>
    <result name="success" type="redirectAction">
        <param name="actionName">show-update-item</param>
        <param name="itemId">${itemId}</param>
    </result>
</action>

Теперь, как было сказано, вам нужно убедиться, что у вас есть методы доступа в обоих действиях (мы назовем их действием 1 и действием 2) для itemId.

В действии 1 $ {itemId} извлекается через метод получения, а в действии 2 $ {itemId} должно быть установлено методом установки.

Еще один вариант - рассмотреть возможность использования сессий. Просто установите переменную сеанса в действии 1, а в действии 2 извлеките переменную сеанса и удалите ее из сеанса, если вы беспокоитесь о накладных расходах. Я склонен использовать сессию чаще, чем нет.

1 голос
/ 14 сентября 2011

Как предложил Рассел, используйте это действие:

    <action
        name="add-item"
        method="addItem"
        class="com.deveto.struts.actions.ItemsAction" >
        <interceptor-ref name="defaultStack"/>
        <result name="success" type="redirectAction">
            <param name="actionName">show-update-item</param>
            <param name="itemId">${itemId}</param>
        </result>
    </action>

Убедитесь, что у вас есть методы доступа в ItemsAction.Убедитесь, что вы используете их, чтобы получить значение «itemId», а НЕ «getAttribute».

public String getItemId() {
    return itemId;
}

public void setItemId(String itemId) {
    this.itemId = itemId;
}

Убедитесь, что когда происходит окончательное перенаправление, вы действительно видите «show-update-item».action? itemId = 33 "в адресной строке вашего браузера.Если «itemId» не передается в запросе, то у вас нет абсолютно никакого способа получить значение «itemId».

...