Javaのサーバーを認識する方法AJAXを使用している場合2.0の複合コンポーネントの顔?
-
26-09-2019 - |
質問
私は、次の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
ことによってそれを交換します。
所属していません StackOverflow