2014-02-24 23 views
0

我有一個表單包含inputText和消息組件。
我想從後臺bean設置錯誤消息,但保持不能執行它。如何設置錯誤消息到p:消息裏面的ui:從支持bean重複

下面是我的html代碼:

<h:form id="formId"> 
    <h:panelGrid id="repeater" columns="2"> 
     <h:outputText value="#{msg['label.appeal.case.reference.no']}" /> 

     <ui:repeat id="uirepeater" value="#{beanPage.list}" var="value" varStatus="status"> 
      <h:panelGrid columns="2"> 
       <p:inputText id="refNo" value="#{beanPage.list[status.index]}" /> 
       <p:message for="refNo" display="text" />     
      </h:panelGrid> 
     </ui:repeat> 
    </h:panelGrid> 

    <p:commandButton id="btmAdd" actionListener="#{beanPage.addRow}" value="Add" update="@form" /> 
    <p:commandButton id="btmSubmit" actionListener="#{beanPage.submit}" value="Submit" update="@form" /> 
</h:form> 

下面是支持豆代碼:

public void submit() { 
    FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "test", "test"); 
    FacesContext.getCurrentInstance().addMessage(":formId:uirepeater:refNo", msg); 
    FacesContext.getCurrentInstance().addMessage(":formId:uirepeater:0:refNo", msg); 
} 

回答

0

這不會UI工作:重複。 您可能認爲inputText的實際ID不會是「refNo」。

< ui:repeat>將確保生成的組件的客戶端ID的唯一性,方法是將其與索引預先加以匹配。它只是多次渲染相同的組件,而不是在樹中創建新的組件。

您可能需要使用c:forEach,它會在樹中生成多個組件。

欲瞭解更多信息,請參閱:

http://www.ninthavenue.com.au/jsf-c-foreach-vs-ui-repeat

How can i set id of h:panelGroup inside ui:repeat

0

試試這個 我用primefaces 4.0,ViewScope,Ajax請求。 使用p:component獲取p:messages的ClientId,並將其傳遞給= someComponent,並通過p:remoteCommand將此值傳遞給bean,稍後您可以使用ClientId設置bean的消息。 在某些元素添加此

onclick="rc([{name:'index',value:#{item.index}},{name:'msg1',value:'#{p:component('someComponent')}'}])" 

創建號碼:remoteCommand設置id

<p:remoteCommand process="@this" name="rc" action="#{bean.someMethod}"/>  

public void someMethod(){ 
FacesContext context = FacesContext.getCurrentInstance(); 
      Map<String,String> params = context.getExternalContext().getRequestParameterMap(); 
      int index=Integer.parseInt(params.get("index")); 
      this.msg[index]=params.get("msg1"); 
} 

現在,您可以設置從豆的消息:

FacesContext.getCurrentInstance().addMessage(this.msg[x], new FacesMessage(FacesMessage.SEVERITY_ERROR,null,"someMessage"));