2014-07-04 86 views
0

我正在用PrimeFaces 5編寫一個應用程序,目前我正在寫一個帶有幾個AutoComplete元素的屏幕,其中一個自動完成的值會影響第二個自動完成中可用的選擇。PrimeFaces p:ajax無法解析bean

我試圖讓這個工作的方式是,當第一個自動完成填充時,會觸發一個Ajax事件來更新具有該值的支持bean,以便當第二個自動完成被調用時,它具有從第一次自動完成準備打開的值。

這是網頁:

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://xmlns.jcp.org/jsf/passthrough" 
    xmlns:pf="http://primefaces.org/ui"> 

    <pf:panel id="header" header="Details" style="margin-bottom:20px"> 
     <h:panelGrid columns="3" style="margin-bottom:10px;border-style:solid;border-width:0.1em;width:100%" cellpadding="5"> 
      <pf:outputLabel id="input1Label" for="input1" value="Specify Input 1" /> 
      <pf:autoComplete id="input1" value="#{bean.input1}" completeMethod="#{bean.completeInput1}" 
         var="input1" itemLabel="#{input1}" itemValue="#{input1}" > 
       <pf:ajax event="itemSelect" listener="#{bean.input1ItemSelect}"/> 
      </pf:autoComplete> 
      <pf:message id="input1Msg" for="input1"/> 

      <pf:outputLabel id="input2Label" for="input2" value="Input 2?" /> 
      <pf:autoComplete id="input2" value="#{bean.input2}" completeMethod="#{bean.completeInput2}" 
         var="input2" itemLabel="#{input2}" itemValue="#{input2}" /> 
      <pf:message id="input2Msg" for="input2"/> 
     </h:panelGrid> 
    </pf:panel> 

</ui:composition> 

然而,當在輸入1選擇一個值,我得到這個錯誤:

不可達,標識「豆」解析爲空:javax.el.PropertyNotFoundException: Target Unreachable,標識符'bean'解析爲空

現在接下來要指出的是,此構圖包含在父組合中,「bean」作爲參數以下列方式傳入:

<c:forEach items="#{parentBean.blockNames}" var="blockName" varStatus="loop"> 

    <f:subview id="block_subview_#{loop.index}"> 
     <ui:include src="#{blockName}"> 
      <ui:param name="bean" value="#{parentBean.blockBeans[loop.index]}"/> 
     </ui:include> 
    </f:subview> 
</c:forEach> 

我已經能夠建立的是,如果我將pf:ajax標記中的引用「bean」更改爲已命名的bean,它能夠解析bean引用並嘗試調用偵聽器方法。所以看起來出於某種原因,pf:ajax標記無法應對「bean」引用,因爲它不是實際bean的名稱,而是從父級傳入的bean參數的名稱。然而所有其他標籤完全能夠在這裏解析「bean」。

有沒有辦法解決這個問題?

編輯:

改變PF:AJAX到F:阿賈克斯似乎使錯誤消失,至少正確的監聽方法,然後調用。我寧願不使用這種方法,但也許這個信息是有用的。

回答

0

找出原因,結果支持bean(或者特別是父頁的支持bean)使用@RequestScoped(或者更確切地說,因爲沒有指定範圍,所以默認爲這個),所以推測不再存在直到用戶調用ajax調用它爲止。將其更改爲@ViewScoped可解決問題。

-1

好,

這是可能發生的,因爲的C:的forEach標籤。嘗試使用ui:代替重複

c:forEach不是JSF標籤,可能會導致混淆。

+0

不幸的是,當我使用** **時,在父頁面中動態包含子視圖的設計無法正常工作,從我讀過的** **中獲取此行爲是必要的,例如答案在這個線程:http://stackoverflow.com/questions/20111010/jsf-dynamically-include-src-in-uiinclude-src-bean-pagepath –

+0

也許你可以找到一些有用的[這個答案](http:// stackoverflow.com/a/24491365/2195551)。 – RafaelTSCS

+0

這是我的答案:-)雖然正如我所提到的方法拒絕爲我需要的設計工作,所以我不得不後來恢復到c:forEach根據我鏈接到的線程。 –

0

您可以嘗試將所包含頁面的內容放在composite component中,然後使用composite component而不是ui:include

我曾在幾個複雜的JSF網站工作過,從來沒有遇到任何問題,composite component技術,而這些ui:include總是在循環中創建一些問題。

相關問題