WebLogic8.1树形结构的实现
草木瓜
2006-6-6
一、序
本文是使用WebLogic的<netui:tree>自带控件,如果对其比较陌生可以察看
E:/bea/weblogic81/samples/workshop/SamplesApp/WebApp/tagSamples/netui/tree
E:/bea/weblogic81/samples/workshop/SamplesApp/WebApp/tagSamples/netui/tree_dynamic
WebLogic自带的两个例子。
关于静态的树形结构相对简单,不在这里详细说明。
二、自定义的树形结构
1.环境目录
---------------------------------
Test/TestWeb/index.jsp Test为应用程序名,TestWeb为Web名
2.创建页面流
---------------------------------
在TestWeb下新建页面流tree。系统会自动生成以下文件,文件夹:
Test/TestWeb/tree
Test/TestWeb/tree/index.jsp
Test/TestWeb/tree/TreeController.jpf
3.准备TreeView相关页面文件
---------------------------------
这里使用frame框架进行演示,左边显示树形结点,右边显示对应内容。所以还要建立两个文件。
tree.jsp作为树形结点页面,content.jsp作为内容页面。
Test/TestWeb/tree/tree.jsp
Test/TestWeb/tree/content.jsp
我们把index.jsp就作为框架容器。代码如下:
<netui:html>
<head>
<title>
Web Frame
</title>
</head>
<frameset cols="20%,*">
<frame src="tree.jsp" name="fraTree" >
<frame src="content.jsp" name="fraContent" >
</frameset>
</netui:html>
4.编辑页面流文件TreeController.jpf
---------------------------------
tree.jsp,content.jsp内容我们暂时不管,先编辑TreeController.jpf页面流文件,全代码如下:
package tree;
/**
* @jpf:controller
* @jpf:view-properties view-properties::
* <!-- 此数据是自动生成的。 不推荐手工编辑此区域。 -->
* <view-properties>
* <pageflow-object id="pageflow:/tree/TreeController.jpf"/>
* <pageflow-object id="action:treeState.do">
* <property value="180" name="x"/>
* <property value="40" name="y"/>
* </pageflow-object>
* <pageflow-object id="action:begin.do">
* <property value="80" name="x"/>
* <property value="100" name="y"/>
* </pageflow-object>
* <pageflow-object id="action-call:@page:tree.jsp@#@action:treeState.do@">
* <property value="96,120,120,144" name="elbowsX"/>
* <property value="31,31,31,31" name="elbowsY"/>
* <property value="East_1" name="fromPort"/>
* <property value="West_1" name="toPort"/>
* </pageflow-object>
* <pageflow-object id="page:tree.jsp">
* <property value="60" name="x"/>
* <property value="40" name="y"/>
* </pageflow-object>
* <pageflow-object id="page:index.jsp">
* <property value="240" name="x"/>
* <property value="100" name="y"/>
* </pageflow-object>
* <pageflow-object id="page:content.jsp">
* <property value="120" name="x"/>
* <property value="100" name="y"/>
* </pageflow-object>
* <pageflow-object id="forward:path#tree#tree.jsp#@action:treeState.do@">
* <property value="144,120,120,96" name="elbowsX"/>
* <property value="31,31,31,31" name="elbowsY"/>
* <property value="West_1" name="fromPort"/>
* <property value="East_1" name="toPort"/>
* <property value="tree" name="label"/>
* </pageflow-object>
* <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
* <property value="116,160,160,204" name="elbowsX"/>
* <property value="91,91,91,91" name="elbowsY"/>
* <property value="East_1" name="fromPort"/>
* <property value="West_1" name="toPort"/>
* <property value="success" name="label"/>
* </pageflow-object>
* </view-properties>
* ::
*/
//以上一堆注释代码,不必理会
public class TreeController extends com.bea.wlw.netui.pageflow.PageFlowController
{
//定义树形根结点
public com.bea.wlw.netui.tags.html.TreeNode liweinode = null;
//页面流加载时运行代码
public void onCreate() throws Exception
{
int i=10;
//实例化树形结点
//第一个参数:结点图标
//第二个参数:结点标签
//第三个参数:一般为null,具体还没搞懂
//第四个参数:结点的点击动作
//第五个参数:作用的页面,即在index.jsp定义的内容框架名fraContent
//第六个参数:展开还是合并
liweinode=new com.bea.wlw.netui.tags.html.TreeNode(
"folder_closed.gif",
"root",
null,
"content.jsp",
"fraContent",
true);
com.bea.wlw.netui.tags.html.TreeNode treenode[]=new com.bea.wlw.netui.tags.html.TreeNode[i];
for(i=0;i<10;i++)
{
treenode[i] = new com.bea.wlw.netui.tags.html.TreeNode(
"folder_closed.gif",
"test"+i,
null,
"content.jsp?sendvalue="+i,
"fraContent",
true);
liweinode.addChild(treenode[i]);
}
}
/**
* Handles the state of the tree when a a link is clicked.
*
* @jpf:action
* @jpf:forward name="tree" path="tree.jsp"
*/
//点击结点结的动作处理,要 <netui:tree中的Action一致。
public com.bea.wlw.netui.pageflow.Forward treeState()
{
String nodeSel = null;
String nodeExpanded = null;
nodeSel = getRequest().getParameter(com.bea.wlw.netui.tags.html.TreeNode.SELECTED_NODE);
nodeExpanded = getRequest().getParameter(com.bea.wlw.netui.tags.html.TreeNode.EXPAND_NODE);
if (nodeExpanded != null)
{
com.bea.wlw.netui.tags.html.TreeNode node = liweinode.findNode(nodeExpanded);
if (node != null)
{
node.setExpanded(!node.isExpanded());
}
return new com.bea.wlw.netui.pageflow.Forward("tree");
}
return new com.bea.wlw.netui.pageflow.Forward(nodeSel);
}
/**
* 此方法代表进入页面流的入口
* @jpf:action
* @jpf:forward name="success" path="index.jsp"
*/
protected com.bea.wlw.netui.pageflow.Forward begin()
{
return new com.bea.wlw.netui.pageflow.Forward("success");
}
}
5.编辑页面tree.jsp,content.jsp
---------------------------------
tree.jsp内容如下,tree对应上面定义的public liweinode,格式必须如此。action即为上面定义的
public com.bea.wlw.netui.pageflow.Forward treeState()方法。
<body>
<netui:tree tree="{pageFlow.liweinode}" action="treeState"></netui:tree>
</body>
content.jsp内容如下:
<body>
<p>
<%=request.getParameter("sendvalue")%>
</p>
</body>
6.运行
---------------------------------
运行会发现左边树形结构是一堆红x,不过点击对应结点,功能倒是没问题。不要紧,下面就解决红x的
问题。这是由于<netui:tree>中未指定imageRoot。
将E:/bea/weblogic81/samples/workshop/SamplesApp/WebApp/tagSamples/netui/tree下
treeImages复制到Test/TestWeb/tree下。并修改tree.jsp。这时
<netui:tree tree="{pageFlow.liweinode}" action="treeState" imageRoot="treeImages"></netui:tree>
再运行会发现一切OK,不会很快就会感觉到那些图片实在是太难看了。我这里用的是.net的图片,下载的
WebControl里面有。把这些好的图片复制到treeImages下,更改代码为:
<netui:tree tree="{pageFlow.liweinode}" action="treeState" imageRoot="treeImages" imageHandleRightMiddle="Tplus.gif" imageHandleDownMiddle="Tminus.gif" imageHandleRightLast="Lplus.gif" imageHandleDownLast="Lminus.gif" imageLineVertical="i.gif" imageLineLast="L.gif" imageLineMiddle="T.gif" />
运行一切OK!
三、从Xml文件中获取树形结构
E:/bea/weblogic81/samples/workshop/SamplesApp/WebApp/tagSamples/netui/tree_dynamic这个例子就
是,有了自定义树形的详细解释,应用也不成问题。
四、郁闷的话
WebLogic8.1的帮助真不敢恭维,不全不说,中文版的居然还有乱码,真晕!