为什么这个无效的EL表达式?

时间:2012-06-20 01:29:43

标签: java jsf el

我正在进行简单的注销,并希望确保我正确引用登录根目录。

<h:form>
  <h:commandLink value="Logout" action="#{request.contextPath}/#{userController.logout()}" />
</h:form>

但是我收到了这个错误:

/topnav.xhtml @16,104 action="#{request.contextPath}/#{userController.logout()}" Not a Valid Method Expression: #{request.contextPath}/#{userController.logout()}

更新

现在我正在从登出链接添加导航规则到登录页面,因为登出链接在所有页面上,我需要添加规则以允许转换回登录页面。这似乎是一个简单的项目的很多配置。我希望只是让被调用的方法指示登录页面是最终目的地并且热门必须将导航条目从所有页面放入登录页面。

2 个答案:

答案 0 :(得分:5)

来自commandLink的文档:

Name      Required  Request-time    Type
==============================================================
action    false     false           javax.el.MethodExpression 

无法将复合表达式#{request.contextPath}/#{userController.logout()}解析为MethodExpression

JSF 2.1 specification说的是MethodExpressions:

  

方法表达式与值表达式非常相似,而是   而不是支持动态检索和设置属性,   方法表达式支持调用(即执行)   任意对象的任意公共方法,传递指定的   参数集,并从被调用的方法返回结果(如果   有)。

答案 1 :(得分:1)

<h:form>
  <h:commandLink value="Logout" action="#{userController.logout()}" />
</h:form>

除了您不需要上下文这一事实外,您不能像使用{2}那样使用#