首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建包含带有对象类型参数的方法的MethodExpression生成解析异常

创建包含带有对象类型参数的方法的MethodExpression生成解析异常
EN

Stack Overflow用户
提问于 2019-05-14 08:09:12
回答 1查看 432关注 0票数 0
  • 我正在通过java代码直接构建一个MethodExpression。
  • 它将表示对bean方法的调用,参数如下所示。
代码语言:javascript
复制
#{bean.method(TheObjectInstance)}
  • 对象是一个简单的自定义pojo对象。
代码语言:javascript
复制
public class TheObject
{
   public String value0 = "value0";
}
  • 我们现在创建MethodExpression,如下所示。
代码语言:javascript
复制
    TheObject object = new TheObject();

    FacesContext context = FacesContext.getCurrentInstance();
    Application application = context.getApplication();
    ExpressionFactory factory = application.getExpressionFactory();

    //Create method expression
    MethodExpression methodExpression = factory.createMethodExpression(
       context.getELContext(), 
       "#{bean.method(" + object + ")}", 
       null, 
       new Class<?>[] {TheObject.class});
  • 它会生成以下错误。
代码语言:javascript
复制
javax.servlet.ServletException: Encountered "@" at line 1, column 87.
Was expecting one of:
    "." ...
    "(" ...
    ")" ...
    "[" ...
    "," ...
    ";" ...
    ">" ...
    "gt" ...
    "<" ...
    "lt" ...
    ">=" ...
    "ge" ...
    "<=" ...
    "le" ...
    "==" ...
    "eq" ...
    "!=" ...
    "ne" ...
    "&&" ...
    "and" ...
    "||" ...
    "or" ...
    "*" ...
    "+" ...
    "-" ...
    "?" ...
    "/" ...
    "div" ...
    "%" ...
    "mod" ...
    "+=" ...
    "=" ...
  • 我尝试了使用字符串作为参数和布尔对象的相同代码,它工作得很好,但是使用自定义对象也会产生相同的错误,如果我们传递一个复杂的对象(例如,UIComponent )。
  • 我正在使用JSF2.2,欢迎任何帮助。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-17 21:35:17

  • 要创建一个包含作为参数#{bean.method(object)}的对象的bean方法的#{bean.method(object)},我们应该使用HTML var=object中声明的变量的名称。
代码语言:javascript
复制
    <h:form>
     <h:datatable var="object" value="#{bean.objects}">
      <h:commandbutton value="test" actionlistenner="#{bean.method(object)}"/>
    </h:datatable>
    </h:form>
  • 如果我们想要生成相同的MethodExpression #{bean.method(object)},则必须生成完整的html元素,包括父html元素(在本例中是包含对象var=object引用的datatable ),然后在MethodExpression代码中生成
代码语言:javascript
复制
    //Wrong implementation: the object is converted as object.getClass().toString()
    MethodExpression methodExpression = factory.createMethodExpression(
       context.getELContext(), 
       "#{bean.method(" + object + ")}", 
       null, 
       new Class<?>[] {TheObject.class});

    //Right implementation: we refer to object referenced by the datatable var. 
    MethodExpression methodExpression = factory.createMethodExpression(
       context.getELContext(), 
       "#{bean.method(object)}", 
       null, 
       new Class<?>[] {TheObject.class});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56125750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档