【问题标题】:how to set error message to p:message inside ui:repeat from backing bean如何将错误消息设置为 p:message inside ui:repeat from backing bean
【发布时间】:2023-03-14 01:25:01
【问题描述】:

我有一个包含 inputText 和消息组件的表单。
我想从后台 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);
}

【问题讨论】:

    标签: jsf-2 primefaces uirepeat backing-beans


    【解决方案1】:

    这不适用于 ui:repeat。 inputText 的实际 ID 不会像您想象的那样是“refNo”。

    将通过在生成组件的客户端 ID 前加上行索引来确保其唯一性。它只是多次渲染同一个组件,而不是在树中创建新组件。

    您可能需要使用 c:forEach,它会在树中生成多个组件。

    更多信息见:

    https://rogerkeays.com/jsf-c-foreach-vs-ui-repeat

    How can I set id of a component/tag inside ui:repeat

    【讨论】:

      【解决方案2】:

      试试这个 我使用 primefaces 4.0、ViewScope、Ajax 请求。 使用 p:component 获取 p:messages 属性 for="someComponent" 的 ClientId 并通过 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"));
      

      【讨论】:

        猜你喜欢
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-08
        相关资源
        最近更新 更多