使用私有布尔值禁用和渲染组件 - 其他方式

时间:2011-05-06 16:19:10

标签: java jsf

我有化妆品问题。我正在使用

private boolean production = true;

(+ getters and setters)

用于应用程序的内部逻辑。在JSF中,我将其称为渲染或禁用组件,例如

<h:commandButton id="f1" action="#{bean.save}" type="submit" disabled="#{bean.production}"/>

它有效。但在我看来有点难看。

还有其他方法可以实现相同的功能吗?

谢谢

1 个答案:

答案 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>