【发布时间】:2011-09-29 12:15:00
【问题描述】:
关于我在 EL 中调用方法的方式,我有几个问题。也许有人可以解释它实际上是如何工作的。
我做了这个非常简单的例子:
index.xhtml
<h:body>
<!-- Using a method -->
#{bba.salute()}
<br/>
<h:outputText value="#{bba.salute()}"/>
<br/>
<!-- Using a method from an injected bean-->
#{bba.b.doSomething()}
</h:body>
BackBeanA.java
@Named("bba")
@SessionScoped
public class BackBeanA implements Serializable {
private static final long serialVersionUID = 5671761649767605303L;
@Inject
private BackBeanB b;
public String salute() {
return "Hi! I am 'A'";
}
public BackBeanB getB() {
return b;
}
public void setB(BackBeanB b) {
this.b = b;
}
}
BackBeanB.java
@Named("bbb")
@SessionScoped
public class BackBeanB implements Serializable {
private static final long serialVersionUID = -4786092545430477941L;
public String doSomething() {
System.out.println("Hello!!!");
return "I am a SessionScopped Backing Bean, my name is 'B' and i am doing something";
}
}
这是我的问题:
当我从 backing bean 调用方法时,什么时候需要使用方括号 (),什么时候不需要?示例:如果我从
#{bba.salute()}中删除括号,我会收到一条错误消息(找不到名为“salute”的属性)我还想学习如何从注入的 bean 中调用方法。我在BackBeanA中注入了BackBeanB,但是当我在页面中说
#{bba.salute()}时,我没有看到来自BackBeanB中的方法的消息。这是为什么?注入的 bean 不需要在@PostConstruct中初始化,对吗?注入的 bean 的 getter 和 setter 够用吗?-
注意我说
<h:outputText value="#{bba.salute()}"/>的那一行,它可以工作,但 eclipse 会显示如下警告:这是为什么呢?
【问题讨论】:
-
关于你的评论:"//这个bean的范围只能大于包含它的bean。".使用 CDI 时这是不正确的。删除评论,只会让你自己和未来的维护者感到困惑。
-
感谢您的建议,我将删除它
标签: java jsf jakarta-ee jsf-2 el