我正在寻找一些用于在JSF托管bean中设置属性的代码。我的第一个想法是这样的:
<c:set var="#{loginBean.device}" value="mobil"></c:set>
这意味着我想将属性device
设置为值"mobil"
,而不必单击按钮。
答案 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(...);
}
无论如何,为我工作......