我有一个包含inputText和message组件的表单。
我想从支持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>
下面的是支持bean代码:
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 :(得分:0)
这不适用于ui:repeat。 您可能认为inputText的实际ID不会是“refNo”。
&lt; ui:重复&gt;将通过在行索引前加上它来确保生成组件的客户机ID的唯一性。它只是多次渲染相同的组件,而不是在树中创建新的组件。
您可能需要使用c:forEach,它会在树中生成多个组件。
有关详细信息,请参阅:
答案 1 :(得分:0)
试试这个 我使用primefaces 4.0,ViewScope,Ajax请求。 使用p:component获取p:messages的ClientId atributte为=“someComponent”并通过p:remoteCommand将此值传递给bean,稍后您可以使用ClientId设置bean的消息。 在某些元素中添加此
onclick="rc([{name:'index',value:#{item.index}},{name:'msg1',value:'#{p:component('someComponent')}'}])"
创建p: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");
}
现在您可以设置来自bean的消息:
FacesContext.getCurrentInstance().addMessage(this.msg[x], new FacesMessage(FacesMessage.SEVERITY_ERROR,null,"someMessage"));