1

と呼ばれるFaceletsサブビューbasedata-cpanel.xhtmlがあり、そのパラメーターは<ui:param>sを介して渡されます。

<ui:define name="content-top">
  <h:form>
    <ui:include src="/subviews/basedata-cpanel.xhtml">
      <ui:param name="customerId"   value="#{pqHome.pq.customer.id}" />
      <ui:param name="customerName" value="#{pqHome.pq.customer.name}" />
      <ui:param name="customers"    value="#{organizationManager.allCustomers}" />        
    <ui:include />
  </h:form>
</ui:define>

サブビューでは、下のパネルに現在選択されている顧客名を表示したいだけです(このパネルはNEWおよびUPDATEパネル/ページ用です)。これにはAJAXリクエストが必要です。

のコード/subviews/basedata-cpanel.xhtml

      <h:selectOneMenu value="#{customerId}" id="customer-select">
        <f:selectItems value="#{customers}"
                       var="customer"
                       itemValue="#{customer.id}"
                       itemLabel="#{customer.name}" />
        <f:ajax render="customer-name" />
      </h:selectOneMenu>
      <h:outputText value="#{customerName}" id="customer-name" />

を選択に入れました<f:ajax render="customer-name" />が、outputTextが更新されません。本当に期待していなかったのですが...

それを機能させるために何をする必要がありますか?

Faceletsサブビューには、渡されたものと同じパラメーターがまだあるので、「新しいパラメーター」を取得するにはどうすればよいですか?これのベストプラクティスは何ですか?

PS:pqHomeは@ViewScopedBeanです

4

1 に答える 1

1

ドロップダウンは顧客のIDのみを変更し、顧客の名前は変更しません。さらに、それは顧客エンティティ全体をまったく変更しません。既存の顧客のIDのみを変更します。これは良くない。

IDだけでなく、顧客全体を設定できるようにコードを変更する必要があります。例えば

<ui:include src="/subviews/basedata-cpanel.xhtml">
    <ui:param name="customer" value="#{pqHome.pq.customer}" />
    <ui:param name="customers" value="#{organizationManager.allCustomers}" />        
</ui:include>

<h:selectOneMenu value="#{customer}" id="customer-select" converter="customerConverter">
    <f:selectItems value="#{customers}" var="c" itemValue="#{c}" itemLabel="#{c.name}" />
    <f:ajax render="customer-name" />
</h:selectOneMenu>
<h:outputText value="#{customer.name}" id="customer-name" />

Converter顧客IDとCustomerオブジェクトの間で変換するを作成し、で使用することを忘れないでください<h:selectOneMenu>

于 2012-04-24T13:34:22.967 に答える