Отслеживание предыдущей страницы в JSF

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


person Nrusingha    schedule 29.08.2011    source источник


Ответы (1)


Зависит от конкретного функционального требования, которое не совсем ясно из вашего вопроса. Вы можете передать уникальный параметр запроса. Например. когда речь идет о ссылке GET:

<h:link value="Next" outcome="next">
    <f:param name="foo" value="bar" />
</h:link>

или POST-ссылку:

<h:form>
    <h:commandLink value="Next" action="next">
        <f:param name="foo" value="bar" />
    </h:commandLink>
</h:form>

с в next.xhtml

<h:someComponent rendered="#{param.foo == 'bar'}">
    ...
</h:someComponent>

или если вас не волнует значение параметра:

<h:someComponent rendered="#{not empty param.foo}">
    ...
</h:someComponent>

Альтернативой, которая может быть намного лучше, если вы не хотите, чтобы конечный пользователь мог манипулировать запросом, является установка свойства bean-компонента во время действия POST, а затем возврат к следующему представлению:

<h:form>
    <h:commandLink value="Next" action="#{bean.next}" />
</h:form>

с напр.

public String next() {
    foo = "bar";
    return "next";
}

и в next.xhtml

<h:someComponent rendered="#{bean.foo == 'bar'}">
    ...
</h:someComponent>
person BalusC    schedule 29.08.2011
comment
Я использую ‹f:param› с ‹hx:commandExButton› (который преобразуется в ‹input type=submit›), который является реализацией JSF от IBM, и он не работает. Могу ли я передать его как входной скрытый тип? - person Nrusingha; 30.08.2011
comment
Вы все еще используете старый JSF 1.x? Вместо этого используйте командную ссылку. <f:param> в командных кнопках работает только в JSF 2.x. Если вы используете JSF 1.2 (и, следовательно, не JSF 1.1!), вы также можете вместо этого использовать <f:setPropertyActionListener>. Это позволяет вам установить свойство компонента напрямую, а не передавать его в качестве манипулируемого параметра запроса. - person BalusC; 30.08.2011