如何在ui中设置错误信息到p:message:从支持bean重复

时间:2014-02-24 08:50:39

标签: jsf-2 primefaces uirepeat backing-beans

我有一个包含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);
}

2 个答案:

答案 0 :(得分:0)

这不适用于ui:repeat。 您可能认为inputText的实际ID不会是“refNo”。

&lt; ui:重复&gt;将通过在行索引前加上它来确保生成组件的客户机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

答案 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"));