4

我有 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 传递到另一个?

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

4

4 回答 4

3

您可以将 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 的机制并不十分熟悉,这是我想到的第一件事。请注意,保存视图时属性可能会保留 - 我不记得在属性映射上设置的内容。

于 2009-07-07T22:39:13.833 回答
2

通常您将值分配给某些输入控件,例如:

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

这意味着获取和设置someField属性的值。#{pageBean.field}请详细说明在您的案例中应该确定的价值。

于 2009-07-07T21:54:39.600 回答
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>
于 2009-07-08T12:22:37.243 回答
0

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

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

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

于 2018-05-31T08:36:00.813 回答