【问题标题】:Facelet Method call where property required需要属性的 Facelet 方法调用
【发布时间】:2011-12-06 11:30:15
【问题描述】:

是否可以调用 JSF 2.0 Facelet EL 中需要属性的方法。例如:

<h:outputText value="#{pojo.methodName}" />

其中 pojo 是 POJO 的一个实例,methodName 是方法的名称。因为 JSF 期望找到 getMethodName 方法,所以会抛出错误。 在有人问为什么需要这个之前,请考虑我们想要在计算的文本中显示的任何值,并且我们不需要 getter 方法并且没有源代码。

BalusC 回答后更新:

无法重命名,因为没有可用的源代码。方法名()不起作用。唯一的区别是在实际代码中它的链式 pojo。

<h:outputText value="#{pojo1.pojo2.methodName()}" />

由于其他属性适用于 pojo2,我假设它的 methodName 不能被调用。服务器说“该类没有属性methodName”

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

空面配置

<faces-config xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
   version="2.0">
</faces-config>

附注环境 JBoss 6 和 JSF 2

【问题讨论】:

    标签: jsf-2 facelets el


    【解决方案1】:

    添加括号:

    <h:outputText value="#{pojo.methodName()}" />
    

    (它只适用于 EL 2.2,它是 Java EE 6 的一部分,所以它只适用于 Tomcat 7、Glassfish 3 等,另见Invoke direct methods or methods with arguments / variables / parameters in EL

    或者只是重命名方法:

    public String getMethodName() {
        // ...
    }
    

    【讨论】:

    • 没有源代码,所以没有重命名。我试过了,但它说没有财产。与示例的唯一区别是它是为多个 Pojo 链接的,例如pojo1.pojo2.methodName()环境 JBoss 6 和 JSF 2
    • 声明的web.xml 是否符合 Servlet 3.0 规范? EL 2.2 需要 Servlet 3.0。如果更低,它将完全回到那个模式。注意该方法不能返回void
    • 我放了 web.xml 标头。 3.0还有什么要求吗?
    • 不,一切看起来都很好。同样,该方法是否返回非void?当您这样编写 EL 时究竟会发生什么?是“什么都没有”发生还是出现异常?
    • PropertyNotFoundException "类 xyz 没有属性 methodName"
    猜你喜欢
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2023-04-10
    • 2016-08-29
    • 2013-10-15
    • 1970-01-01
    • 2016-09-04
    相关资源
    最近更新 更多