2014-02-21 69 views
0

我有以下PARAMS頁:JSF:更新和添加新的請求參數

<f:metadata> 
      <f:event type="preRenderView" listener="#{busquedaBean.init}" /> 
      <f:viewParam name="k" value="#{busquedaBean.keyword}" /> 
      <f:viewParam name="categoryId" value="#{busquedaBean.categoryId}" /> 
      <f:viewParam name="minprice" value="#{busquedaBean.minPrice}" /> 
      <f:viewParam name="maxprice" value="#{busquedaBean.maxPrice}" /> 
     </f:metadata> 

所有這些都是可選的。我需要做2件事情,我目前還無法做到這些:

1)添加新的參數(保留之前的參數)。這是我試圖添加價格參數:

<h:outputText value="Precio diario" /> 
       <o:form includeRequestParams="true"> 
        <h:outputText value="min: " /> 
        <p:inputText id="min" value="#{busquedaBean.minPrice}" /> 
        <h:outputText value="max: " /> 
        <p:inputText id="max" value="#{busquedaBean.maxPrice}" /> 
        <p:commandButton icon="ui-icon-search" ajax="false"> 
         <f:param name="minprice" value="#{busquedaBean.minPrice}" /> 
         <f:param name="maxprice" value="#{busquedaBean.maxPrice}" />  
        </p:commandButton> 
       </o:form> 

這基本上工作,但問題是,網址沒有更新。如果URL中的參數是?minprice = 10 & maxprice = 200,並且我更新這些值,則url保持不變。如果這些參數不包含在URL中,它們將不會被添加,並且過濾器將不起作用。

2)更新param的值: 當categoryId不爲空時,我想顯示一個按鈕來清除這個參數。這是我的嘗試:

<p:button outcome="/busqueda" includeViewParams="true" > 
    <f:param name="categoryId=" value="" /> 
</p:button> 

但這按鈕發出GET這個網址:/ busqueda /的categoryId =%3D &的categoryId = 1 的的categoryId PARAM出現了兩次。我怎樣才能更新現有的參數?

我使用的MyFaces 2.1.14,Tomcat的7,Primefaces 4.0,Omnifaces

謝謝!

+0

你試過'faces- redirect = true'? –

+0

是的,但它不起作用 – Damian

+0

@ L-Ray faces-redirect = true是使其工作但需要做其他事情所必需的。看看我自己的答案。謝謝。 – Damian

回答

0

我一直在錯誤地看着這個。 includeViewParams = true將使請求包含在f:metadata中用當前值聲明的所有參數。如果此值爲空,則不包括該參數。

所以..添加價格PARAMS:

<h:form > 
    <h:outputText value="$ " /> 
    <p:inputText id="min" value="#{busquedaBean.minPrice}"/> 
    <h:outputText value=" a $ " /> 
    <p:inputText id="max" value="#{busquedaBean.maxPrice}"/> 
    <p:commandButton icon="ui-icon-search" ajax="false" action="/busqueda?faces-redirect=true&amp;includeViewParams=true" /> 
</h:form> 

,並刪除設置了一個param:

<p:commandButton action="#{busquedaBean.removeCategory}" ajax="false" icon="ui-icon-close" /> 

在支持bean:

public String removeCategory() { 
    categoryId = null; 
    return "/busqueda?faces-redirect=true&includeViewParams=true"; 
}