JSF - создать общую страницу подтверждения (динамическая навигация) - PullRequest
0 голосов
/ 15 декабря 2009

Я постараюсь объяснить мою проблему. Я использую реализацию IBM JSF 1.2 в очень очень жесткой среде (уровень компании и строгие ограничения - не добавляйте библиотеки и т. Д.).

Я хочу создать простую страницу для подтверждения, которую можно использовать повторно (в общем). Например : 1-page1.jsp> нажмите на кнопку 2-pageConfirmation.jsp> 2 кнопки Да или Нет 3-раз щелкните по Нет> вернуться назад / 3bis-нажмите по Да> перейти к некоторому действию, затем перейдите к page2.jsp

Итак, я хотел хранить на сессии то, что мне нужно, откуда я приехал, куда я хочу пойти. Но вот проблема: как я могу вызвать действие, которое я хочу? Название динамическое. Давайте предположим, что я нахожусь в контроллере, после того как я нажму «Да», я хочу вызвать «myMethodAction» из его имени, которое я сохранил в сеансе. Я думал о том, чтобы оценить его с помощью API языка выражений, но я заблокирован, потому что не могу получить доступ к ELContext и не могу использовать пакет el (el-api.jar).

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

У кого-нибудь есть магические идеи? Или я просто совершенно не прав?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 15 декабря 2009

Вы можете создать полностью независимый управляемый компонент ConfirmationBean и поместить его в область запроса. Вы можете получить к нему доступ в «родительском» bean-компоненте с помощью каждого средства управляемого ввода свойств или просто создать его самостоятельно и поместить в карту запроса.

Первый способ требует много работы в faces-config.xml, если вы хотите связать его с множеством других компонентов, поэтому я не думаю, что это очень привлекательно.

Второй способ требует только немного (многоразового) кода в методе действия. Я приведу пример:

public String submit() {
    ConfirmationBean conformationBean = new ConfirmationBean();
    confirmationBean.setOutcome("outcome"); // Set navigation case outcome where it should return back.
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("confirmationBean", confirmationBean);
    return "confirm";
}

и confirm.jsf должны иметь «результат» в скрытом поле, например

<h:selectBooleanCheckbox value="#{confirmationBean.confirm}" />
<h:inputHidden value="#{confirmationBean.outcome}" />
<h:commandButton value="confirm" action="#{confirmationBean.submit}" />

метод действия ConfirmationBean должен выглядеть следующим образом:

public String submit() {
    if (confirm) {
        return outcome;
    } else {
        return "confirm";
    }
}

или если вы поклонник троичных операторов;)

public String submit() {
    return confirm ? outcome : "confirm";
}
0 голосов
/ 16 декабря 2009

Второе решение: Вызовите действие (строка, сохраненная в блоке подтверждения в сеансе) , вызывая EL , как это решение

Это может быть полезно для некоторых людей здесь, но недоступно для меня, так как я не могу импортировать библиотеки (el-api).

0 голосов
/ 16 декабря 2009

Итак, я пришел с двумя вариантами: - Отменить управление навигацией JSF , как это решение, чтобы включить EL в теге to-view-id

(следующее решение в следующем сообщении, ограничено, потому что я новичок в stackoverflow)

...