JSF 2.0 で Facelets タグをコメントする方法

2011年1月19日 at 5:34 午後

今日は、JSF 2.0 の Facelets でコンポーネントタグをコメントする方法をご紹介します。テスト用のコードを記載する際、デバッグ用のコード、もしくはダミーのコードを埋め込んだりする事があるかと思いますが、本番環境での表示には必要ないコンポーネントをコメントする方法を下記に紹介します。

まず、始めに、下記のようなサンプルページを作成してください。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:commandButton action="#{user.login_dummy}" value="Submit-Dummy"/><br/>
        <h:commandButton action="#{user.login}" value="Submit"/>
    </h:body>
</html>

CDI の UserBean.java

package jp.co.oracle.cdi;
import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.inject.Named;

@Named("user")
@SessionScoped
public class UserBean implements Serializable{
    
    public void login(){
        ;
    }

    public void login_dummy(){
        ;
    }
}

今回は上記コード中の「Submit-Dummy」ボタンをコメントします。何も考えず、通常通り HTML/XML のコメント(<!–    –>)を使って下記のようにコメントをして実行してください。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
<!--        <h:commandButton action="#{user.login_dummy}" value="Submit-Dummy"/><br/> -->
        <h:commandButton action="#{user.login}" value="Submit"/>
    </h:body>
</html>

すると、下記のようなエラーが表示されます。

致命的: Error Rendering View[/comentSample.xhtml]
javax.el.PropertyNotFoundException: The class ‘jp.co.oracle.cdi.org$jboss$weld$bean-$Users$yt133043$NetBeansProjects$JSFSampleApplication$build$web$-ManagedBean-class_jp$co$oracle$cdi$UserBean_$$_WeldClientProxy’ does not have the property ‘login_dummy’.
警告: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception

これは、通常の XML/HTML のコメントのように、<!–    –> でコメントしても JSF 2.0 の実行環境では完全にコメントできていない事を表しています。内部的には、 #{user.login_dummy}の EL式が評価・処理されています。

そこで、JSF のコンポーネントタグをコメントする方法(EL式も含め)を2通り紹介します。


1. <ui:remove> </ui:remove> タグを使用する方法
2. facelets.SKIP_COMMENTS を web.xml に記載する方法

まず、始めの方法は
<ui:remove> タグを使用する方法です。下記の 10 行目〜12 行目のように、コメントしたいコンポーネントを <ui:remove> </ui:remove> でくくってください。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ui:remove>
            <h:commandButton action="#{user.login_dummy}" value="Submit-Dummy"/><br/>
        </ui:remove>
        <h:commandButton action="#{user.login}" value="Submit"/>
    </h:body>
</html>

コメントした後、画面を再描画すると「Submit-Dummy」のコマンドが非表示になっている事を確認できます。

この時の描画されたページの HTML ソースコードは下記のようになります。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>	
        <link rel="stylesheet" type="text/css" href="/JSFSampleApplication/primefaces_resource/2.1/skins/sam/skin.css" />
        <title>Facelet Title</title>
    </head>
    <body>
        <input type="submit" name="j_idt7" value="Submit" />
    </body>
</html>

次にもう一つの方法は、
web.xml 設定ファイルに facelets.SKIP_COMMENTS を記述する方法です。下記の7 行目〜10 行目のように web.xml に facelets.SKIP_COMMENTS を追加してください。すると<!–    –> でくくられた箇所が EL 式も評価されずコメントされる事が確認できます。

web.xml 設定ファイルの編集:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Production</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.SKIP_COMMENTS</param-name>
        <param-value>true</param-value>
    </context-param>
...


この時の HTML の出力結果は下記のようになります。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>	
        <link rel="stylesheet" type="text/css" href="/JSFSampleApplication/primefaces_resource/2.1/skins/sam/skin.css" />
        <title>Facelet Title</title>
    </head>
    <body>
        <input type="submit" name="j_idt7" value="Submit" />
    </body>
</html>

どちらの方法を使用してもコメントができるようになりますので、開発者の皆様の使い勝手の良い方法を選択してください。

広告

Entry filed under: Application Server/GlassFish, GlassFish, Java.

JSF 2.0 の Ajax 対応はとてもかんたん Java 開発者向け情報サイト OTN


Java Champion & Evangelist

Translate

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2011年1月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー

clustermap

ブログ統計情報

  • 1,267,819 hits

RSSフィード

アーカイブ


%d人のブロガーが「いいね」をつけました。