我有化妆品问题。我正在使用
private boolean production = true;
(+ getters and setters)
用于应用程序的内部逻辑。在JSF中,我将其称为渲染或禁用组件,例如
<h:commandButton id="f1" action="#{bean.save}" type="submit" disabled="#{bean.production}"/>
它有效。但在我看来有点难看。
还有其他方法可以实现相同的功能吗?
谢谢
答案 0 :(得分:1)
我正在寻找更优雅的解决方案。因为JSF想要私有+ getter和setter,而另一个JAVA类想要私有STATIC + get,sets。因此,我有时需要使用两个布尔值来做一件事,这有点混乱......
让JSF bean获取getter委托。 E.g。
public boolean isProduction() {
return Settings.PRODUCTION;
}
这样,您最终只得到一个包含该值的变量,即Settings.PRODUCTION
。您甚至可以将它与请求/视图作用域bean分离,并将其包装在应用程序范围的托管bean中。更重要的是,如果你让它扩展Map
并将值放在构造上,那么你将能够使用像disabled="#{settings['PRODUCTION']}"
这样的东西。
E.g。
@ManagedBean(name="settings", eager=true)
@ApplicationScoped
public class SettingsManager extends HashMap<String, Object> {
public SettingsManager() {
put("PRODUCTION", Settings.PRODUCTION);
put("DEBUG", Settings.DEBUG);
put("HOSTNAME", Settings.HOSTNAME);
// ...
}
}
如果您仍在使用JSF 1.x,请删除这些注释并在faces-config.xml
中按如下方式映射。
<managed-bean>
<managed-bean-name>settings</managed-bean-name>
<managed-bean-class>com.example.SettingsManager</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>