5

我正在寻找一些用于在 JSF 托管 bean 中设置属性的代码。我的第一个想法是这样的:

<c:set var="#{loginBean.device}" value="mobil"></c:set>

这意味着我想将属性设置为不需要单击按钮device的值。"mobil"

4

4 回答 4

10

是的,您可以为此目的使用 c:set。

<c:set value="mobil" target="#{loginBean}" property="device" />

文档:http ://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/c/set.html

但是,设置静态值很少有意义。您可能会考虑直接在托管 bean 类中设置默认值。同样在可维护性方面,因为您可以在 Java 代码中比在视图层中更好地处理常量。

于 2012-08-07T11:39:35.690 回答
2

我认为您想要 JSF 标记子标记 setPropertyActionListener。您可以将其设置为任何 ActionComponent 中的子标记。

<h:anyActionComponent id="component1">
  <f:setPropertyActionListener target="#{loginBean.device}" value="mobil" />
</h:anyActionComponent>

更新:

我最初误解了用户问题。他们有一个页面,并且他们希望在页面加载时设置一个属性。有几种方法可以做到这一点,但两者都有点不同。如果要在每次回发后将属性设置为值,则可以在 ManagedBean 方法上使用 @PostConstruct 注释。

@PostConstruct
public void initializeStuff() {
  this.device = "mobil";
}

现在,如果我有一个 ViewScoped 或 SessionScope bean 需要在页面加载时使用默认值初始化一次,那么您可以设置一个阶段生命周期事件,该事件将在每次回发后运行并检查页面是否应该初始化.

mah.xhmtl:

<f:event listener="#{loginBean.initialize()}" type="preRenderView" />

登录豆:

public void initialize() {
  if (this.device == null)
    this.device = "mobil";
}
于 2012-08-07T11:26:44.043 回答
0

我无法评论:如果您需要在页面加载时准备好值,您可以使用托管 Bean 直接初始化值或使用其构造函数或 @PostConstruct 来做同样的事情。

     @ManagedBean
     @ResquestScoped
     public class LoginBean {
          private String device = "some value";
          //Using Constructor
          public LoginBean() {
               device = getvalueFromSomewhere();
          }

          //Using PostConstruct
          @PostConstruct
          public void init() {
               device = getvalueFromSomewhere();
          }

     }
于 2012-08-07T11:47:44.173 回答
0

您可以通过另一个 ManagedBean 进行设置,而不是在 xhtml 文件中设置值。例如,如果您有管理 page1.xhtml 的 managedBean1 和管理 page2.xhtml 的 managedBean2。如果 page1.xhtml 包含 page2.xhtml,例如:

<ui:include src="page2.xhtml"/>

在 managedBean1 你可以在顶部

@ManagedProperty(value = "#{managedBean2}")
private ManagedBean2 managedBean2;

在 PostConstruct 中

@PostConstruct
public void construct() {
    managedBean2.setProperty(...);
}

无论如何为我工作...

于 2016-04-12T08:54:10.057 回答