c:为bean属性设置

时间:2012-08-07 11:06:16

标签: jsf properties jstl managed-bean

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

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

这意味着我想将属性device设置为值"mobil",而不必单击按钮。

4 个答案:

答案 0 :(得分:9)

是的,您可以使用c:set来实现此目的。

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

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

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

答案 1 :(得分: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" />

<强> LoginBean:

public void initialize() {
  if (this.device == null)
    this.device = "mobil";
}

答案 2 :(得分:0)

我无法评论:如果您需要在加载页面上准备好值,您可以使用Managed 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();
          }

     }

答案 3 :(得分: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(...);
}
无论如何,

为我工作......