我正在寻找一些用于在 JSF 托管 bean 中设置属性的代码。我的第一个想法是这样的:
<c:set var="#{loginBean.device}" value="mobil"></c:set>
这意味着我想将属性设置为不需要单击按钮device
的值。"mobil"
我正在寻找一些用于在 JSF 托管 bean 中设置属性的代码。我的第一个想法是这样的:
<c:set var="#{loginBean.device}" value="mobil"></c:set>
这意味着我想将属性设置为不需要单击按钮device
的值。"mobil"
是的,您可以为此目的使用 c:set。
<c:set value="mobil" target="#{loginBean}" property="device" />
但是,设置静态值很少有意义。您可能会考虑直接在托管 bean 类中设置默认值。同样在可维护性方面,因为您可以在 Java 代码中比在视图层中更好地处理常量。
我认为您想要 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";
}
我无法评论:如果您需要在页面加载时准备好值,您可以使用托管 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();
}
}
您可以通过另一个 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(...);
}
无论如何为我工作...