2012-09-21 79 views
3

我已經看到這個問題問了很多問題,但是,沒有人正確回答,因此我決定再次提問。所以,如果我有這樣的:如果我在A.xhtml如何訪問託管bean中的ui:param值

<ui:include src="B.xhtml"> 
    <ui:param name="formId" value="awesome Id"/> 
</ui:include> 

所以在B.xhtml,我能做到這一點

<h:outputText value="#{formId}"/> 

當我運行A.xhtml,我會看到awesome Id得到印在屏幕上。但是,如何訪問backing bean中的formId的值。我看着FacesContext.getCurrentInstance().getAttributes()FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()裏面,我似乎無法找到它。走遠一點,所以我嘗試:

裏面B.xhtml,我現在有

<h:inputHidden id="hiddenFormId" value="#{formId}"/> 
<h:outputText value="#{formId}"/> 

的想法是,我可以在RequestParameterMap訪問下鍵hiddenFormIdformId值。但現在,如果我有:

<h:form id="myForm"> 
     <ui:include src="B.xhtml"> 
      <ui:param name="formId" value="awesome Id"/> 
     </ui:include> 
     <a4j:commandButton render="myForm" value="My Button"/> 
</h:form> 

那麼如果我看的POST請求裏我會得到這個埃羅(當內部鍍鉻或FF調試模式)

<partial-response><error><error-name>class javax.faces.component.UpdateModelException</error-name><error-message><![CDATA[/B.xhtml @9,61 value="${formId}": /index.xhtml @27,61 value="awesome Id": Illegal Syntax for Set Operation]]></error-message></error></partial-response>

所以如何訪問用戶界面:託管bean中的參數值?

+1

是[這個問題](http://stackoverflow.com/questions/5394304/passing-values-with-uiparam-and-access-them-in-backing-bean)類似於你的東西? – ElderMael

+0

@mael:我正在嘗試他的代碼,但有些事情我沒有得到。如果你瞭解他/她的代碼,你能幫助我多一點嗎? 'hiddenValue'是outputLabel的id,'UiTreeWalker'是什麼? –

回答

9

其中<ui:param>在蓋下存儲實際上取決於實施。

FaceletContext faceletContext = (FaceletContext) FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY); 
String formId = (String) faceletContext.getAttribute("formId"); 

是否值將可然而受制於時間:在鑽嘴魚科是如下真實存儲在您的支持bean的的FaceletContext的屬性,因此可用。如果您的後臺代碼在執行包含渲染時運行,那麼它將可用,否則它將是null

我記得MyFaces做的有點不同,但我不記得細節了,我現在沒有它的來源。

對於您的<h:inputHidden>嘗試,<h:inputHidden>不適合將查看定義的隱藏參數與表單提交一起傳遞的唯一目的。只需使用純HTML即可。

<input type="hidden" name="hiddenFormId" value="#{formId}" /> 

它將作爲一個請求參數與這個名字一起提供。

+1

謝謝BalusC。我忘了提到一個小問題,那就是我在驗證階段需要formId的值。所以當我從FaceletContext訪問該值時,它是空的。以前如果我使用h:inputHidden,這個信息出現在我的RequestParameterMap中,所以我可以得到正確的值,但我切換到我無法在驗證階段的我的RequestParameterMap中看到這個值。任何想法,爲什麼,BalusC? –

+0

您是否通過確切的名稱「hiddenFormId」獲得隱藏的輸入值?請注意,名稱中沒有表單ID前綴。 – BalusC

+0

哦,我很抱歉,它的工作原理是'name =「hiddenFormId」',但我把'id =「hiddenFormId」'。非常感謝你。 –

相關問題