2

これはコードです:

<h:panelGrid columns="3" style="margin-left: auto; margin-right:auto;">
    <f:facet name="header">
        <rich:column colspan="2">
            <h:outputText value="Ingrese datos del padre" />
        </rich:column>
    </f:facet>

    <label for="padreRut">RUT</label>
    <h:inputText id="padreRut" value="#{IngresoAlumno.padre.per_Rut}">
        <a4j:ajax event="keyup" render="formPadre" immediate="true" />
        <f:validateLongRange minimum="0" />
    </h:inputText>
    <rich:message for="padreRut" ajaxRendered="true" />
</h:panelGrid>

<h:panelGrid id="formPadre" columns="3" style="margin-left: auto; margin-right:auto;" rendered="#{IngresoAlumno.padre.per_Rut gt 0}">
//...From here on there are form elements

問題は、イベントをトリガーすると、2 番目の panelGrid がレンダリングされないことです。ここで何か間違ったことをしていますか?よろしくお願いします。

4

1 に答える 1

2

ajaxマジックは、クライアント側で実行され、HTMLDOMツリーで機能するJavaScriptコードによって実行されます。を指定するrender="someId"と、基本的にJavaScriptに、JSFコンポーネントのHTML表現を指定されたIDに置き換え、取得したajax応答の新しいHTML表現に置き換えるように指示します。

ただし、指定されたIDを持つJSFコンポーネントのHTML表現が最初にJSFによってレンダリングされない場合、JavaScriptはHTMLDOMツリー内で置き換えるものを見つけることができません。

これがあなたの場合に起こっていることです。代わりに、常にレンダリングされるJSFコンポーネントのIDを指定する必要があります。これにより、JavaScriptがそれを見つけて、必要に応じてHTMLDOMツリーで更新できるようになります。これにはを使用できます<h:panelGroup>

<a4j:ajax ... render="formPadre" />
...
<h:panelGroup id="formPadre">
    <h:panelGrid ... rendered="#{IngresoAlumno.padre.per_Rut gt 0}">
        ...

参照:

于 2012-08-06T21:01:42.910 に答える