- 環境
- CentOS Linux release 7.8.2003 (Core)
- Payara Server 5.194
- Eclipse IDE for Enterprise Java Developers.Version: 2020-03 (4.15.0)
- openjdk version "11.0.7" 2020-04-14 LTS
事象 : JSFのタグがHTMLにならないでそのまま表示される
JSFのプロジェクトをつくって早速XHTMLを書いたけど・・・JSFのタグがそのまま出力されている
index.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<head>
<title>JSFのタグがHTMLにならないときの対応方法</title>
</head>
<body>
<h3>JSFのタグがHTMLにならないときの対応方法</h3>
h:selectBooleanCheckboxでチェックボックスを書いてみた
<div>
<h:selectBooleanCheckbox id="checkBox" value="false" />
<h:outputLabel for="checkBox" value="チェックボックス"/>
</div>
</body>
</html>
原因 : web.xmlでのURL定義と使っているURLがあっていないから
servlet-mappingは、ウェブアプリケーションにアクセスするURLの指定方法を定めます。
わかりやすいJava EE ウェブシステム入門 川場隆 著
WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>tryJsf</display-name>
...省略...
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
</web-app>
web.xmlの定義だとhttp://xxxxxx/{display-name}/faces/index.xhtml
で表示する
が、今回の事象はhttp://xxxxxx/{display-name}/index.xhtml
で表示したので失敗した。
対応1 : 使うURLをweb.xmlに合わせる
http://xxxxxx/{display-name}/index.xhtml
を使うとちゃんと表示される
対応2 : web.xmlを使うURLに合わせる
web.xmlを修正して再ビルドして再実行する
WEB-INF/web.xml
...省略...
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>