- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为 session 设置一个全局属性,例如“上帝模式”,因此在 session 期间,一个人可以看到比平均水平更多的内容(仅用于发展目的),例如
<managed-bean>
<managed-bean-name>appBean</managed-bean-name>
<managed-bean-class>se.corp.app.package.ApplicationBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>godmode</property-name>
<value>true</value>
<property-class>java.lang.Boolean</property-class>
</managed-property>
</managed-bean>
但是我怎样才能从另一个java类中访问属性集呢?
最佳答案
您可以采用两种方法来解决此问题:一种简单,另一种更符合一般的 JSF 理念。换句话说,这是个人诚信与技术原则的问题:D
最简单的一个是由 Per Henrik Lausten 绘制的。然而它在某种程度上是有缺陷的。它并不是真正的环境中立/不可知论。这并不意味着这是一个问题,但是如果你想重新分发你的 bean,你将被迫并且正在强制你,你的实现者,使用你选择的 bean 名称 - 例如appBean
现在我不想让事情变得过于复杂,但更灵活的方法如下:
<managed-bean>
<managed-bean-name>appBean</managed-bean-name>
<managed-bean-class>bean.ApplicationBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>name</property-name>
<value>appBean</value>
</managed-property>
</managed-bean>
bean :
public class ApplicationBean implements Serializable {
private static final long serialVersionUID = 1L;
private static final String DEFAULT_NAME = "appBean";
private String name;
private boolean godMode;
public void setName(String name) {
this.name = name;
}
public void setGodMode(boolean godMode) {
this.godMode = godMode;
}
public boolean isGodMode() {
return godMode;
}
// Your other logic here
public static ApplicationBean getInstance(FacesContext facesContext) {
return (ApplicationBean) Helper.resolveVariable(facesContext, name != null ? name : DEFAULT_NAME);
}
}
通过上述方法,bean 可以部署在任何地方,如果需要,您可以定义一个不同的名称 - 托管 bean-name
并且属性值必须匹配。否则,您将省略 faces-config.xml 中的 name 属性,同时将 management-bean-name
设置为与 DEFAULT_NAME
java 类属性中显示的完全相同。
“哲学”方法是利用属性注入(inject)的方法。这完全取决于您发现自己在所有 bean 中需要特定 bean 的频率。但首先请看示例:
<managed-bean>
<managed-bean-name>appBean</managed-bean-name>
<managed-bean-class>bean.ApplicationBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>godMode</property-name>
<value>true</value>
<property-class>java.lang.Boolean</property-class>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>myOtherBean</managed-bean-name>
<managed-bean-class>bean.MyOtherBean</managed-bean-class>
<managed-bean-scope>view</managed-bean-scope>
<managed-property>
<property-name>app</property-name>
<value>#{appBean}</value>
</managed-property>
</managed-bean>
其他 Bean 类:
public class MyOtherBean implements Serializable {
private static final long serialVersionUID = 1L;
private ApplicationBean app;
public void setApp(ApplicationBean app) {
this.app = app;
}
public void doSomething() {
// App is already here
// no need to resolve it
if (app.isGodMode()) {
//do something;
}
}
}
我个人使用这两种方法,尽管我更喜欢最后一种方法。但有一个问题:您只能注入(inject)共享相同作用域的 Bean,或者比您注入(inject)它们的 Bean 的作用域生命周期更长的 Bean。
应用程序进入 session :是
session 进入 View :是
查看应用程序:否
请求查看:否
关于java - 如何从 java 类中的托管 bean 访问属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43914381/
我是一名优秀的程序员,十分优秀!