読者です 読者をやめる 読者になる 読者になる

PrimeFaces Extensions 3.0.0 Document Viewer を使うときの注意点

今日試しててハマったのでメモ

結論は、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 か何かでパラメータ渡せるようにしてとかかな?