получить параметры GET в управляемом компоненте JSF

Может ли кто-нибудь сказать мне, как перехватить параметры, переданные из URI в управляемый компонент JSF? У меня есть навигационное меню, все узлы которого ссылаются на какой-то навигационный случай. И у меня есть два похожих пункта: приобретение продуктов и выпуск продуктов. У них одна и та же страница, но один другой параметр: productType. Я пытаюсь установить его, просто добавив его в URL-адрес в элементе «to-view-id» следующим образом:

<navigation-case>
    <from-outcome>acquiring|products</from-outcome>
    <to-view-id>/pages/products/list_products.jspx?productType=acquiring</to-view-id>
</navigation-case>

<navigation-case>
    <from-outcome>issuing|products</from-outcome>
    <to-view-id>/pages/products/list_products.jspx?productType=issuing</to-view-id>
</navigation-case>

Но я не могу получить этот "productType" из моего управляемого компонента. Я попытался получить это через FacesContext следующим образом:

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("productType")

А вот так:

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    request.getParameter("productType");

И я попытался включить его как параметр управляемого компонента в Faces-config.xml, а затем получить его через обычный сеттер:

 <managed-bean>
        <managed-bean-name>MbProducts</managed-bean-name>
        <managed-bean-class>my.package.product.MbProducts</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
     <managed-property>
         <property-name>productType</property-name>
         <value>#{param.productType}</value>
     </managed-property>
    </managed-bean>
...
public class MbProducts {
...
 public void setProductType(String productType) {
  this.productType = productType;
 }
...
}

Но ни один из этих способов мне не помог. Все они вернули null. Как я могу получить этот тип продукта? Или как я могу передать это другим способом?


person mykola    schedule 01.04.2010    source источник


Ответы (1)


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

Чтобы это исправить, вам нужно активировать перенаправление вместо переадресации. Он создает совершенно новый запрос (вы также видите его отражение в адресной строке браузера).

В JSF добавление

<redirect/>

к навигационному делу следует делать.

person BalusC    schedule 01.04.2010
comment
Спасибо, BalusC! В моем случае мне также пришлось изменить .jspx на .jsf, так как с ‹redirect/› он показал мне CompilationException :) - person mykola; 02.04.2010