2012-04-24 37 views
1

我有一個Facelets的子視圖稱爲basedata-cpanel.xhtml,它得到通過<ui:param>秒後它的參數:更新文本分量的JSF2/Facelets的子視圖

<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是@ViewScoped

回答

1

你的下拉只是改變了客戶,而不是客戶名稱的標識。更重要的是,它根本不會改變整個客戶實體。它只會更改現有客戶的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>使用之間轉換。

+0

哇,我不相信這會從Facelets子視圖工作。使用實體代替ID /原語**總是一件好事。沒有臭名昭着的文章http://balusc.blogspot.de/2011/09/communication-in-jsf-20.html#ConvertingAndValidatingGETRequestParameters我不會得到CDI/EJB'converter =「#{customerConverter} 「'去!它甚至可以處理空值(無客戶)。非常感謝! – Kawu 2012-04-25 08:00:34

+0

不客氣。你也可以找到[OmniFaces'SelectItemsConverter'](http://balusc.blogspot.com/2012/03/omnifaces-project-has-started.html#SelectItemsConverter)。不再需要轉換器中的EJB/DAO。 – BalusC 2012-04-25 13:52:47