我正在尝试替换 Alfresco 中 JSP 文件中的部分字符串(您可以在此处找到它)。
更具体地说,我想在第 54 行的“fullName”之后显示更多信息。我需要的信息作为“GROUP_something”形式的字符串存储在 r.id 中,我想要“something”。我可以毫无问题地显示 r.id,如下面的片段所示,但是一旦我尝试使用 fn:replace 删除 GROUP_ 前缀,它就会崩溃。
原来的:
<h:outputText id="user-txt" value="#{r.fullName}" rendered="#{r.isGroup}" />
也可以:
<h:outputText id="user-txt" value="#{r.fullName} (#{r.id})" rendered="#{r.isGroup}" />
不工作:
<h:outputText id="user-txt" value="#{r.fullName} (#{fn:replace(r.id, 'GROUP_', '')})" rendered="#{r.isGroup}" />
完整代码: http: //pastebin.com/w8AXWUH1
完整的堆栈跟踪如下:
javax.faces.FacesException:在第 194 行处理 JSP 页面 /jsp/dialog/container.jsp 时发生异常 191: 192: 193: 194:“ /> 195: 196: 197: 堆栈跟踪: 造成的: org.apache.jasper.JasperException:在第 194 行处理 JSP 页面 /jsp/dialog/container.jsp 时发生异常 191: 192: 193: 194:“ /> 195: 196: 197: 堆栈跟踪: 造成的: org.apache.jasper.JasperException: javax.faces.FacesException: 在调用 encodeEnd 时出现异常:{Component-Path: [Class: javax.faces.component.UIViewRoot,ViewId: /jsp/dialog/container.jsp][Class: javax.faces.component.html.HtmlForm,Id: dialog][Class: javax.faces.component.UINamingContainer,Id: dialog-body][Class: org.alfresco.web.ui.common.component.UIPanel,Id: users-panel][Class: org.alfresco.web.ui.common.component.data.UIRichList,Id: users-list][Class: org.alfresco.web.ui.common.component.data.UIColumn,Id: _idJsp17][类:javax.faces.component.html.HtmlOutputText,Id:user-txt]} 造成的: javax.faces.FacesException:在调用 encodeEnd 时出现异常:{Component-Path:[类:javax.faces.component.UIViewRoot,ViewId:/jsp/dialog/container.jsp][类:javax.faces.component.html。 HtmlForm,Id: dialog][Class: javax.faces.component.UINamingContainer,Id: dialog-body][Class: org.alfresco.web.ui.common.component.UIPanel,Id: users-panel][Class: org .alfresco.web.ui.common.component.data.UIRichList,Id: users-list][Class: org.alfresco.web.ui.common.component.data.UIColumn,Id: _idJsp17][Class: javax.faces .component.html.HtmlOutputText,Id: user-txt]} 造成的: javax.faces.FacesException:无法使用路径检索组件的值:{Component-Path:[类:javax.faces.component.UIViewRoot,ViewId:/jsp/dialog/container.jsp][类:javax.faces.component .html.HtmlForm,Id: dialog][Class: javax.faces.component.UINamingContainer,Id: dialog-body][Class: org.alfresco.web.ui.common.component.UIPanel,Id: users-panel][类:org.alfresco.web.ui.common.component.data.UIRichList,Id:用户列表][类:org.alfresco.web.ui.common.component.data.UIColumn,Id:_idJsp17][类: javax.faces.component.html.HtmlOutputText,Id: user-txt]} 造成的: javax.faces.el.EvaluationException:无法获取表达式 '#{r.fullName} (#{fn:replace(r.id, 'GROUP_', '')})' 的值 造成的: javax.faces.el.ReferenceSyntaxException:表达式中不支持的函数。功能:fn:替换
我无法理解这个错误,因为其他答案(例如this one或this one)提倡这种确切的方法。
我还添加了函数 taglib:
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
在标题中。
任何帮助表示赞赏!
编辑:有关环境的更多信息:我正在使用 Alfresco 的“捆绑”版本,使用 Tomcat 7.0.30 作为容器。使用以下版本的库:
- JSF Apache MyFaces v1.1.8(myfaces-api-1.1.8.jar 和 myfaces-impl-1.1.8.jar)
- JSP Tomcat 的内置 Jasper (jasper.jar)
- EL我认为它是 Tomcat 的内置 Jasper-EL(通过 el-api.jar 和 jasper-el.jar),虽然Alfresco 还捆绑了 commons-el.jar(规范版本:2.0 和实现版本:1.0)