Наиболее эффективная навигация JSF 1.2 от Java - PullRequest
2 голосов
/ 16 мая 2011

У меня есть выпадающий список на моей главной странице index.xhtml JSF. Связанный код / ​​commandButton выглядит следующим образом:

    <h:selectOneMenu id="nodes" value="#{MyBacking.chosenNode}">
    <f:selectItems value="#{MyBacking.nodes}" />
</h:selectOneMenu>

<a4j:commandButton value="Retrieve" styleClass="ctrlBtn"
    id="retrieveBtn" style="margin-bottom: 2px;"
    onclick="#{rich:component('nodeLoadWait')}.show()"   # modal
    action="#{MyBacking.redirect}"
    image="/img/btnRetrieve26.png" />

action был ранее установлен в 'привет', а в моем faces-context.xml:

<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>hello</from-outcome>
        <to-view-id>/nodeMgmt.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

Когда action был установлен в 'привет', нажатие кнопки retrieve работало нормально, в этом случае грани обрабатывали бы навигацию, а метод MyBacking.setChosenNode назначал бы все необходимые данные, так что содержимое файла nodeMgmt.xhtml отображаться полностью заполненным.

Однако, если первоначальное действие, вызванное тем, что пользователь щелкнул retrieve, превысило время ожидания, веб-страница зависла бы, даже если бин обнаружил время ожидания, и я бы хотел перенаправить пользователя на страницу с истекшим временем .

Чтобы обработать компонент поддержки, возвращающий сообщение о тайм-ауте (обнаружение ошибок, которое уже присутствует, когда «внутри» приложения), я подумал, что вместо использования файла faces-context.xml я бы обработал его внутренне.

Я обнаружил, что FacesContext.getCurrentInstance (). GetExternalContext (). Redirect, но Javadoc JSF 1.2 не имеет этого. Возможно, это потому, что он не представлен? Это перенаправляет, хотя это сбивает с толку. Почему нет документации по этому методу?

Тем не менее, он перенаправляет меня на страницу, но отображает без учета данных, созданных компонентом во время первоначального запроса. Боб находится в области запроса в настоящее время. Соответствующий код в бобе:

    try {
        FacesContext.getCurrentInstance().getExternalContext().redirect("nodeMgmt.jsf");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Является ли использование внутреннего java-вызова лучшим способом для такого перенаправления? Если нет, то лучше ли использовать faces-context.xml? Если так, то как? Пока мы здесь - может кто-нибудь направить меня к хорошему источнику чтения для использования FacesContext.getCurrentInstance (). GetExternalContext (), в котором есть достойные примеры того, как сделать простую навигацию с данными, потому что у меня возникают проблемы с поиском.

Приветствия

1 Ответ

2 голосов
/ 16 мая 2011

Я обнаружил перенаправление FacesContext.getCurrentInstance (). GetExternalContext ()., Но Javadoc JSF 1.2 не имеет этого. Возможно, это потому, что он не представлен? Это перенаправляет, хотя это сбивает с толку. Почему нет документации по этому методу?

Конечно, есть.

Возможно, вы читали не тот Javadoc. Один из FacesContext возможно?


Тем не менее, он перенаправляет меня на страницу, но отображает без учета данных, создаваемых компонентом во время первоначального запроса. В настоящее время компонент находится в области запроса.

Перенаправление указывает браузеру запустить новый HTTP-запрос. Таким образом, все bean-объекты области запроса из старого запроса будут обработаны и повторно инициализированы в новом запросе. Если вы хотите сохранить запрос, вместо этого вы хотели бы использовать переадресацию (которую использует JSF по умолчанию), но это не сработает с запросами, инициированными ajax, поскольку в любом случае он будет придерживаться той же страницы. Только ответ с перенаправлением заставит Ajax изменить расположение окна с помощью JavaScript.

Если вы хотите сохранить некоторые параметры в новом запросе, вам нужно будет передать их в качестве параметров запроса. Э.Г.

externalContext.redirect("nodeMgmt.jsf?foo=bar");

и установите их как управляемое свойство в компоненте.

...