0

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);
}
4

2 に答える 2

0

これは ui:repeat では機能しません。ご想像のとおり、inputText の実際の ID は「refNo」ではありません。

< ui:repeat > は、生成されたコンポーネントのクライアント ID の一意性を、先頭に行インデックスを追加することで保証します。ツリーに新しいコンポーネントを作成するのではなく、同じコンポーネントを数回レンダリングするだけです。

おそらく、ツリーにいくつかのコンポーネントを生成する c:forEach を使用する必要があります。

詳細については、次を参照してください。

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

ui:repeat 内のコンポーネント/タグの ID を設定するにはどうすればよいですか

于 2014-02-24T13:39:55.020 に答える
0

これを試してください私は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"));
于 2015-07-30T14:21:58.723 に答える