Javaのサーバーを認識する方法AJAXを使用している場合2.0の複合コンポーネントの顔?

StackOverflow https://stackoverflow.com/questions/4231206

質問

私は、次のJava Serverが2.0複合コンポーネントをFacesの持っています。私が使用しています注意してください。の逐語的に

resources/customer/customer.xhtml

<composite:interface>
    <composite:attribute name="id" required="false"/>
    <composite:attribute name="firstName" required="false"/>
    <composite:attribute name="lastName" required="false"/>
    <composite:attribute name="age" required="false"/>
    <composite:attribute name="rendered" required="false"/>
</composite:interface>
<composite:implementation>
    <f:verbatim id="#{cc.attrs.id}" rendered="#{cc.attrs.rendered}">
        <div>
            <div>
                <p>First name</p>
                <h:outputText value="#{cc.attrs.firstName}"/>
            </div>
            <div>
                <p>Last name</p>
                <h:outputText value="#{cc.attrs.lastName}"/>
            </div>
            <div>
                <p>Age</p>
                <h:outputText value="#{cc.attrs.age}"/>
            </div>
        </div>
    </f:verbatim>
</composite:implementation>
使用アヤックスするためには、私が行っている(お知らせのレンダリングの属性)

<h:form id="search">
<div>
    <h:commandButton value="Search" action="#{customerSearchController.search}">
        <f:ajax execute="@form" render="search:result"/>
    </h:commandButton>
</div>
<customer:customer id="result"
                   rendered="#{customerSearchController.customer != null}"
                   firstName="#{customerSearchController.customer.firstName}"
                   lastName="#{customerSearchController.customer.lastName}"
                   age="#{customerSearchController.customer.age}"/>
</h:form>

私のCustomerSearchControllerは、

次のように示されています
private Customer customer;

// getter's and setter's

public void search() {
    customer = new Customer();

    customer.setFirstName("First");
    customer.setLastName("Last");

    customer.setAge(30);
}

CustomerSearchControllerと顧客の両方が豆を管理されています。私はAJAXリクエストを呼び出すときしかし、それは文句:の検索:結果は

が見つかりません

この問題を解決するために、私が何をすべき???

役に立ちましたか?

解決

<f:ajax render>は、HTML DOMツリー内の既存のクライアントIDを指している必要があります。それは、サーバー側でレンダリングされていないので、search:result要素はHTML DOMツリーでは使用できませんので、JS / AJAXレンダリング/更新にHTML DOMツリーで何かを見つけることができません。

ラップそれAjaxはそれを見つけることができるようにHTML DOMツリーで常に利用可能である別の要素内でます。

<h:panelGroup id="result">
    <customer:customer rendered="..." />
</h:panelGroup>

実際の問題、f:verbatimのみ逐語的に(プレーンHTML)を含むようになっていることに注意してください、ではないJSFコンポーネントには無関係。 h:panelGroupことによってそれを交換します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top