Alfresco の JSP ファイルの文字列の一部を置き換えようとしています (そこにあります)。
具体的には、54 行目の「fullName」の後にさらに情報を表示したいと考えています。必要な情報は、「something」が必要な場所に「GROUP_something」という形式の文字列として r.id に格納されています。以下のスニペットのように、問題なく 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: ダイアログ][クラス: javax.faces.component.UINamingContainer,Id: ダイアログ本体][クラス: org.alfresco.web.ui.common.component.UIPanel,Id:ユーザーパネル][クラス: 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.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: ユーザーリスト][クラス: org.alfresco.web.ui.common.component.data.UIColumn,Id: _idJsp17][クラス: javax.faces .component.html.HtmlOutputText,Id: ユーザー txt]} のせいで: javax.faces.FacesException: 次のパスのコンポーネントの値を取得できませんでした: {Component-Path: [Class: javax.faces.component.UIViewRoot,ViewId: /jsp/dialog/container.jsp][Class: javax.faces.component .html.HtmlForm,Id: ダイアログ][クラス: javax.faces.component.UINamingContainer,Id: ダイアログ本体][クラス: org.alfresco.web.ui.common.component.UIPanel,Id: ユーザーパネル][クラス: 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:replace
他の回答(例:this oneまたはthis one)がこの正確な方法を提唱しているため、このエラーを理解できません。
関数 taglib も追加しました。
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
ヘッダーに。
どんな助けでも大歓迎です!
編集:環境に関する詳細情報:Tomcat 7.0.30をコンテナとして使用して、Alfrescoの「バンドル」バージョンを使用しています。次のバージョンのライブラリが使用されます。
- 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 (Specification-Version: 2.0 および Implementation-Version: 1.0) もバンドルされています。