如何在jsf页面中设置bean属性值?

时间:2009-07-07 21:12:10

标签: jsf facelets

我有Facelet组件,我有支持bean。当我将我的组件包含到某个页面时,我将bean从页面传递给我的组件:

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

我的组件也有支持bean,我尝试将值从调用页面bean传递给我的:

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

但这种方法不起作用?有一些方法可以将值从一个bean传递给另一个bean吗?

我正在尝试创建困难的自定义组件,必须对传递给它的事情进行一些验证和其他操作?也许我错了?

4 个答案:

答案 0 :(得分:2)

通常您可以为某些输入控件指定值,例如:

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

这意味着获取和设置someField属性的值。 请提供有关在您的案例中确定#{pageBean.field}的价值的详细信息。

答案 1 :(得分: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包含的机制,这是我发生的第一件事。请注意,保存视图时可能会保留属性 - 我无法记住在属性映射中设置的内容。

答案 2 :(得分:0)

以下是我的一个facelets文件中的一些代码。正如您可以看到作为参数传递的bean的值,即:

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

可以使用[dto]表示法访问bean的属性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>

答案 3 :(得分:0)

您可以在JSF 2.0中使用params调用bean方法 因此,您可以尝试将setter方法放在这样的注释中:

<!-- #{componentBean.setField(pageBean.field)} -->

因此,当加载页面时,将触发setter方法。