
[ x:tree2 ]
■2005/9/14
Hepon
■環境:JSF1.1
MyFaces1.0.9
WindowsXP
ExadelStudioPro3.0.3
■今回x:tree2を使うにあたって、JSPの頭に記述しているMyFacesのtaglibを、
<%@ taglib uri="http://myfaces.sourceforge.net/tld/myfaces_ext_0_9.tld" prefix="x" %>
から、
<%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%>
に変更しました。
もとのtaglibだと、tree2がunknown tagとかなんとか出ていたので。
また、それにともなって、
myfaces-extensions.jar
をlibに追加しました。
■また、今回、index.jspのつくりが、x:treeのサンプルと違います。
x:treeのサンプルでは
<jsp:forward page="/pages/tree.jsf" />
としていた所を、
<a href="pages/tree2.jsf">サンプルへ</a>
に変えました。
なぜこのようにしたかというと、
jsp:forwardを使うと、index.jspがWebContent直下にあるので、
tree2.jsfの現在位置がWebContent直下になってしまいます。
そして、なんらかのアクションを起こすと、
今度は現在位置がWebContent/pages/に移動します。
すると、相対的に画像の場所を指定している為に、
現在位置が移動すると画像が出なくなるので、
とりあえず最初に、pagesの下に現在位置を移動させてしまうことにしたのです。
■それからもうひとつ。
サーバー側で処理を行うツリーをh:formで囲むと、
なぜか処理がおかしくなります。
「 + 」を押してもツリーが開かなくなるのです。
なので、とりあえず囲まないで作成しています。
■時間があれば後で解説を記述します。
ひとまず画面写真とソースをどうぞ。

★Tree2Bean.java
package demo;
import org.apache.myfaces.custom.tree2.TreeNode;
import org.apache.myfaces.custom.tree2.TreeNodeBase;
public class Tree2Bean {
private TreeNode tree2;
//コンストラクタ
public Tree2Bean() {
tree2 = new TreeNodeBase("folder-B", "ROOT", true);
//分類01:和食
TreeNodeBase personNode = new TreeNodeBase("folder-A", "分類01:和食", true);
//ぶっかけめし
personNode.getChildren().add(new TreeNodeBase("folder-B", "ぶっかけめし", true));
//うどん
TreeNodeBase folderNode = new TreeNodeBase("folder-B", "うどん", true);
folderNode.getChildren().add(new TreeNodeBase("document", "カレーうどん", false));
folderNode.getChildren().add(new TreeNodeBase("document", "味噌煮込み", false));
folderNode.getChildren().add(new TreeNodeBase("document", "あんかけうどん", false));
personNode.getChildren().add(folderNode);
//そば
folderNode = new TreeNodeBase("folder-B", "そば", true);
folderNode.getChildren().add(new TreeNodeBase("document", "納豆おろしそば", false));
folderNode.getChildren().add(new TreeNodeBase("document", "とろろそば", false));
folderNode.getChildren().add(new TreeNodeBase("document", "天ぷらそば", false));
folderNode.getChildren().add(new TreeNodeBase("document", "わかめそば", false));
personNode.getChildren().add(folderNode);
tree2.getChildren().add(personNode);
//分類02:その他
personNode = new TreeNodeBase("folder-A", "分類02:その他", true);
//イタリアン
personNode.getChildren().add(new TreeNodeBase("folder-B", "イタリアン", true));
//中華
folderNode = new TreeNodeBase("folder-B", "中華", true);
folderNode.getChildren().add(new TreeNodeBase("document", "麻婆豆腐", false));
folderNode.getChildren().add(new TreeNodeBase("document", "棒々鶏", false));
folderNode.getChildren().add(new TreeNodeBase("document", "青椒肉絲", false));
personNode.getChildren().add(folderNode);
tree2.getChildren().add(personNode);
}
public TreeNode getTree2(){
return tree2;
}
public void setTree2(TreeNode tree2) {
this.tree2 = tree2;
}
}
★tree2.jsp
<%@ page contentType="text/html;charset=MS932" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%>
<!-- ********************* -->
<HTML>
<HEAD>
<title>x:tree2 サンプル</title>
</HEAD>
<body bgcolor="white">
<f:view>
<!-- ********************* -->
<h1><h:outputText value="x:tree2 サンプル"/></h1>
<h:outputText value="2005/9/14/Wed/Hepon"/><br>
<br>
<!-- ↓ツリー↓ -->
<h:outputText value="クライアント側で処理を行うツリー"/><br>
<x:tree2 value="#{Tree2Bean.tree2}" id="client-tree" var="node" varNodeToggler="t">
<f:facet name="folder-A">
<h:panelGroup>
<f:facet name="expand">
<h:graphicImage style="border: 0px" value="../images/yellow-folder-open.png" rendered="#{t.nodeExpanded}"/>
</f:facet>
<f:facet name="collapse">
<h:graphicImage style="border: 0px" value="../images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}"/>
</f:facet>
<h:outputText value="#{node.description}"/>
</h:panelGroup>
</f:facet>
<f:facet name="folder-B">
<h:panelGroup>
<f:facet name="expand">
<h:graphicImage style="border: 0px" value="../images/yellow-folder-open.png" rendered="#{t.nodeExpanded}"/>
</f:facet>
<f:facet name="collapse">
<h:graphicImage style="border: 0px" value="../images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}"/>
</f:facet>
<h:outputText value="#{node.description}" />
<h:outputText value=" (#{node.childCount})" rendered="#{!empty node.children}"/>
</h:panelGroup>
</f:facet>
<f:facet name="document">
<h:panelGroup>
<h:commandLink immediate="true" >
<h:graphicImage style="border: 0px" value="../images/document.png" />
<h:outputText value="#{node.description}"/>
</h:commandLink>
</h:panelGroup>
</f:facet>
</x:tree2>
<br>
<h:outputText value="サーバー側で処理を行うツリー"/><br>
<x:tree2 value="#{Tree2Bean.tree2}" id="server-tree" var="node" varNodeToggler="t" clientSideToggle="false">
<f:facet name="folder-A">
<h:panelGroup>
<h:commandLink immediate="true" action="#{t.toggleExpanded}">
<h:graphicImage style="border: 0px" value="../images/yellow-folder-open.png" rendered="#{t.nodeExpanded}" />
<h:graphicImage style="border: 0px" value="../images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}"/>
</h:commandLink>
<h:outputText value="#{node.description}" />
</h:panelGroup>
</f:facet>
<f:facet name="folder-B">
<h:panelGroup>
<h:commandLink immediate="true" action="#{t.toggleExpanded}">
<h:graphicImage style="border: 0px" value="../images/yellow-folder-open.png" rendered="#{t.nodeExpanded}"/>
<h:graphicImage style="border: 0px" value="../images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}"/>
</h:commandLink>
<h:outputText value="#{node.description}" />
<h:outputText value=" (#{node.childCount})" rendered="#{!empty node.children}"/>
</h:panelGroup>
</f:facet>
<f:facet name="document">
<h:panelGroup>
<h:commandLink immediate="true" >
<h:graphicImage style="border: 0px" value="../images/document.png"/>
<h:outputText value="#{node.description}"/>
</h:commandLink>
</h:panelGroup>
</f:facet>
</x:tree2>
<!-- ********************* -->
</f:view>
</body>
</HTML>
★index.jsp
<%@ page contentType="text/html;charset=MS932" %>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
</head>
<body>
<a href="pages/tree2.jsf">サンプルへ</a>
</body>
</html>
★web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>htc008</display-name>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>true</param-value>
</context-param>
<filter>
<filter-name>extensionsFilter</filter-name>
<filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class>
<init-param>
<param-name>uploadMaxFileSize</param-name>
<param-value>100m</param-value>
</init-param>
<init-param>
<param-name>uploadThresholdSize</param-name>
<param-value>100k</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>extensionsFilter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>extensionsFilter</filter-name>
<url-pattern>/faces/*</url-pattern>
</filter-mapping>
<!-- Listener, that does all the startup work (configuration, init). -->
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<!-- Welcome files -->
<welcome-file-list>
<welcome-file>index.jsf</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
★faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>Tree2Bean</managed-bean-name>
<managed-bean-class>demo.Tree2Bean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<lifecycle/>
<application>
<locale-config/>
</application>
<factory/>
</faces-config>
|