2009-07-07 71 views
4

我有Facelet組件,我有支持它的bean。當我包括我的組件到一些網頁我通過豆從頁面到我的組件:如何在jsf頁面中設置bean屬性值?

<ui:include src="./WEB-INF/templates/myTemplate.xhtml"> 
        <ui:param name="pageBean" value="#{thisPageBean}" /> 
</ui:include> 

我的組件還支持豆,我嘗試從調用頁面Bean傳遞價值,以我:

<c:set target="#{componentBean}" property="field" value="#{pageBean.field}" /> 

但是這種方法不起作用?有什麼方法可以將價值從一個bean傳遞給另一個?

我想創建一個難以定製的組件,必須對傳遞給它的東西做一些驗證和其他操作?也許我錯了嗎?

<h:inputText value='#{pageBean.field}'/> 

這意味着雙方獲取和設置someField屬性的值:

回答

2

您可以將bean作爲組件上的屬性傳遞(我假設您在說「組件」時使用的是ui:component)。

對於分量:

<ui:component binding="#{componentBean.myComponent}"> 
    <f:attribute name="foo" value="#{pageBean.field}" /> 
    <h:outputText value="#{componentBean.something}" /> 
</ui:component> 

你可以有一個後臺bean的這些方法:

private Object field; 
private UIComponent component; 

public void setMyComponent(UIComponent c) { component = c; } 
public UIComponent getMyComponent() { return component; } 

private void lookupFields() { 
    field = component.getAttributes().get("foo"); 
} 

public String getSomething() { 
    if (field == null) { 
    lookupFields(); 
    } 
    return "" + field; 
} 

不是很優雅,但我不是那麼熟悉的Facelets包括力學這是我發生的第一件事。請注意,保存視圖時可能會保留屬性 - 我不記得在屬性映射上設置的內容。

+0

感謝這對我的作品,但我找到了一些其他的方式來做我想做的事。 – aindl 2009-07-08 19:17:53

2

通常一些輸入控件像您指定的值。 請詳細說明您的案件中應確定#{pageBean.field}的價值。

+0

一個偉大的簡單direkt回答這個問題! – Olle89 2012-01-03 15:01:29

0

下面是我的一個facelets文件中的一些代碼。正如你可以看到作爲參數傳遞豆,即價值:

<ui:param name="bean" value="#{thisPageBean}" /> 

和bean的屬性,DTO,可以使用[DTO]符號訪問。

<h:panelGroup> 
    <h:selectOneMenu id="titleMenu" value="#{bean[dto].title}"> 
     <f:selectItems value="#{suburbsMBean.titles}" /> 
    </h:selectOneMenu> 
    <h:message for="titleMenu" styleClass="error" /> 
</h:panelGroup>