получить параметры GET в управляемом компоненте JSF - PullRequest
4 голосов
/ 01 апреля 2010

Может кто-нибудь сказать мне, как отлавливать параметры, переданные из 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");

И я попытался включить его в качестве параметра управляемого компонента в Face-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;
 }
...
}

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

1 Ответ

3 голосов
/ 01 апреля 2010

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

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

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

<redirect/>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...