2009-07-07 68 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>