今日試しててハマったのでメモ
結論は、web.xml の Faces Servlet で url-pattern に .jsf を入れとくこと。
<servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> <url-pattern>*.jsf</url-pattern> </servlet-mapping>
.xhtml を直アクセスさせない方法は幾つかありますが、
JSFのFaceletsでxhtmlに直接アクセスさせない方法 - DENの思うこと
JSFのURL直打ち対応で困ったこと(/faces/を抜いてみたら…) - Challenge Java EE !
お手軽なので url-pattern を .xhtml にしていました。
でそういう環境だと Document Viewer で PDF を表示する事が出来ません。
理由は
core/DocumentViewerRenderer.java at master · primefaces-extensions/core · GitHub
private String getResourceURL(DocumentViewer documentViewer, FacesContext context) { //TODO: manage compressed & uncopressed resouceces return "documentviewer/viewer.html.jsf?ln=primefaces-extensions-uncompressed&v=" + this.getClass().getPackage().getSpecificationVersion() + "&"; }
や
core/viewer.html at master · primefaces-extensions/core · GitHub
<link rel="stylesheet" href="viewer.css.jsf?ln=primefaces-extensions-uncompressed&v=${project.version}" /> <script type="text/javascript" src="compatibility.js.jsf?ln=primefaces-extensions-uncompressed&v=${project.version}"></script> <!-- This snippet is used in production, see Makefile --> <link rel="resource" type="application/l10n" href="locale/locales.txt.jsf?ln=primefaces-extensions-uncompressed&v=${project.version}" /> <script type="text/javascript" src="l10n.js.jsf?ln=primefaces-extensions-uncompressed&v=${project.version}"></script> <script type="text/javascript" src="pdf.js.jsf?ln=primefaces-extensions-uncompressed&v=${project.version}"></script> <script type="text/javascript" src="viewer.js.jsf?ln=primefaces-extensions-uncompressed&v=${project.version}"></script>
で、".jsf" と指定しているので、.jsf を Faces Servlet として扱わないと上手いこと処理出来ないから見たいです。
これを直そうとすると、ちょっと面倒そうな感じですね。
web.xml か何かでパラメータ渡せるようにしてとかかな?