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" />

不要忘记创建一个在客户 ID 和对象Converter之间转换并在.Customer<h:selectOneMenu>

于 2012-04-24T13:34:22.967 回答