我有一个名为basedata-cpanel.xhtml
的Facelets 子视图,它通过<ui:param>
传递其参数:
<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" />
放入select中,但不更新outputText。我真的没想到,但是......
我需要做些什么才能让它发挥作用?
由于Facelets子视图仍然具有与传递的参数相同的参数,我如何获得“新的”?对此最好的做法是什么?
PS:pqHome是@ViewScoped
bean
答案 0 :(得分:1)
您的下拉列表仅更改客户的ID,而不是客户名称。更重要的是,它根本不会改变整个客户实体。它只会更改现有客户的ID。这不好。
您需要更改代码,让它设置整个客户,而不是仅设置其ID。 E.g。
<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>
中使用它。