sfr*_*frj 6 java jsf el java-ee jsf-2
关于我在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>
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
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";
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
当我从一个支持bean调用一个方法时,我什么时候需要使用方括号(),当我不需要时?示例:如果我从中删除括号#{bba.salute()},我会收到一条错误,说明(找不到名为'敬礼'的属性)
我还想学习如何从注入的bean调用方法.我在BackBeanA中注入了BackBeanB,但是当我#{bba.salute()}在页面中说,我没有看到方法中的消息BackBeanB.这是为什么?注入的bean不需要在@PostConstruct右边初始化?注入豆的吸气剂和固定剂是否足够?
请注意我说的行<h:outputText value="#{bba.salute()}"/>,它可以工作,但是eclipse会显示如下警告:

这是为什么?
Rom*_*las 25
当你写作时#{myBean.salute},JSF正在寻找这个属性 salute.在Java代码中,它被"翻译"为myBean.getSalute();.换句话说,你必须为这个属性提供getter(如果这个属性可以被JSF修改,例如在输入字段中使用它时,最终需要提供setter).
当你写作时,#{myBean.salute()}你指的是方法 salute().
规则很简单:当你想要做一个动作时使用一个方法(即通常它将在一个action或actionListener属性中定义).在其他情况下,使用财产.在您的示例中,您希望在页面中显示一些文本,因此请调用#{myBean.salute()},然后调用#{myBean.salute}.
对于第二点,尝试更改代码以访问属性something而不是方法:
<!-- Using a method from an injected bean-->
#{bba.b.something}
Run Code Online (Sandbox Code Playgroud)
并在BeanB代码中:
public String getSomething() {
System.out.println("Hello!!!");
return "I am a SessionScopped Backing Bean, my name is 'B' and i am doing something";
}
Run Code Online (Sandbox Code Playgroud)
关于你的最后一点,我认为你的Eclipse根本不处理EL 2.0语法.
| 归档时间: |
|
| 查看次数: |
37760 次 |
| 最近记录: |