-3

我已经使用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)

该数据上下文仅用于测试目的;我知道这不是一个理想的方法。问题是什么?

4

2 回答 2

1

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

  • 有一个没有参数的默认构造函数
  • 有 get 和 set 函数对(如​​果你省略 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;
        }
   }

注意:fn 在 EL 中很小,但 getFn 需要大写 F。

于 2013-06-21T10:26:58.497 回答
1
  1. 你的EL错了。拆下括号。
  2. 你需要 getter 和 setter 来实现你的价值
  3. getter 和 setter 不能是静态的
  4. 如果要将 viewScope 用于数据上下文,则需要实现java.io.Serializable
于 2013-06-21T09:47:06.943 回答