表达式语言(EL)语法中缺少用于在Java类中调用函数的东西

时间:2013-06-21 09:21:37

标签: jsf xpages

我使用Expression Language的(EL)myUnmanagedBean.fn()来计算Java类链接标签的文本。其中myUnmanagedBean是bean的名称。

功能是,

private static String s="vijay";

static String fn()
{
    return s;
}

我已经向xpage添加了数据上下文,相应的代码是:

<xp:this.dataContexts>
    <xp:dataContext var="myUnmanagedBean"
        value="${javascript:new com.kkmsoft.vijay.Invoke1()}">
    </xp:dataContext>
</xp:this.dataContexts>

错误页面显示:

Exception:

myUnmanagedBean.fn()
Encountered "(", expected one of ["}", ".", ">", "gt", "<", "lt", "==", "eq", "<=", "le", ">=", "ge", "!=", "ne", "[", "+", "-", "*", "/", "div", "%", "mod", "and", "&&", "or", "||", "?"]
Encountered "(" at line 1, column 21. Was expecting one of: "}" ... "." ... ">" ... "gt" ... "<" ... "lt" ... "==" ... "eq" ... "<=" ... "le" ... ">=" ... "ge" ... "!=" ... "ne" ... "[" ... "+" ... "-" ... "*" ... "/" ... "div" ... "%" ... "mod" ... "and" ... "&&" ... "or" ... "||" ... "?" ...

在堆栈跟踪中,

javax.faces.el.ReferenceSyntaxException: myUnmanagedBean.fn()
com.sun.faces.application.ApplicationImpl.checkSyntax(Unknown Source)

该datacontext仅用于测试目的;我知道这不是一个理想的方法。 有什么问题?

2 个答案:

答案 0 :(得分:1)

  1. 你的EL错了。删除括号。
  2. 您的价值需要吸气剂和镶嵌者
  3. getter和setter不能是静态的
  4. 如果要将viewScope用于数据上下文,则需要实现 java.io.Serializable

答案 1 :(得分:1)

斯文是对的。您的代码不是Bean(它看起来非常像VBScript)。豆子:

  • 有一个没有参数的默认构造函数
  • 获取并设置了函数对(如​​果省略set,则它是只读属性)

您将使用的EL表达式为myUnmanagedBean.fn

   package com.kkmsoft.vijay;
   //Import statements omitted

   public class Invoke1 implements Serializable {

        private String s="vijay";

        public String getFn() {
            return this.s;
        }

        // Optional
        public String setFn(String newS) {
            this.s = newS;
        }
   }

注意:EL中的fn很小,但getFn需要大写字母F.