知识大全 Struts自定义标签的过程
Posted 文件
篇首语:人生必须的知识就是引人向光明方面的明灯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Struts自定义标签的过程相关的知识,希望对你有一定的参考价值。
Struts自定义标签的过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
近日体验了一下Eclipse
打开某个jsp页面 页面上的select下拉列表框用Struts自定义标签来完成
新建页面 Test jsp
在Web应用的WEB INF目录下自定义标签TLD文件 TestTag tld
<?xml version= encoding= UTF ?><!DOCTYPE taglib PUBLIC //Sun Microsystems Inc //DTD JSP Tag Library //EN jsptaglibrary_ _ dtd ><taglib> <tlibversion> </tlibversion> <jspversion> </jspversion> <shortname>dtree</shortname> <uri> bean</uri>
<tag> <name>selectResnodes</name> <tagclass>myWeb taglib SelectTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>id</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>nodeslist</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag></taglib>
在myWeb Action包下定义AbstractResAction java文件和TestAction java文件(利用了java的反射机制)
AbstractResAction java文件
package myWeb Action; import java lang reflect Method;
import javax servlet HttpServletRequest;import javax servlet HttpServletResponse;
import apache struts action Action;import apache struts action ActionForm;import apache struts action ActionForward;import apache struts action ActionMapping;
public abstract class AbstractResAction extends Action public final ActionForward execute(ActionMapping actionMapping ActionForm actionForm HttpServletRequest ServletRequest HttpServletResponse ServletResponse) String cmd = ( actionType ); // 获取参数 其实为函数名 System out println( actionType = + cmd); if (cmd == null || cmd equals( )) return actionMapping findForward( default ); try Method method = this getClass() getMethod( cmd new Class[] ActionMapping class ActionForm class HttpServletRequest class HttpServletResponse class );
// 利用反射机制 调用method方法 而这个method方法是由页面指定的actionType定义的 return (ActionForward) method invoke(this new Object[] actionMapping actionForm ServletRequest ServletResponse ); catch (Exception e) e printStackTrace(); return actionMapping findForward( default ); TestAction java文件 package myWeb Action; import java util ArrayList; import javax servlet HttpServletRequest;import javax servlet HttpServletResponse; import apache struts action ActionForm;import apache struts action ActionForward;import apache struts action ActionMapping; import asiainfo ainx advancedres bo ResnodesBO; public class QueryNodesAction extends AbstractResAction public ActionForward showNodesList(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) ResnodesBO bo = new ResnodesBO(); ArrayList alNodes = bo selectData(); //我的应用中定义了BO和DAO类来封装对数据库的读写 此处为从数据库中取出的数据结果集 request setAttribute( resnodesList alNodes); //页面中的用到该自定义标签时要用到resnodesList这个属性 return mapping findForward( showResnode );
在myWeb taglib包下定义SelectTag java文件
package myWeb taglib; import java io IOException;import java util ArrayList; import javax servlet jsp JspException;import javax servlet jsp JspWriter;import javax servlet jsp tagext TagSupport; import apache struts util RequestUtils; import myWeb vo ResnodesVO; public class SelectTag extends TagSupport //这里的三个属性对应TestTag tld文件中对selectResnodes定义的三个属性 private String id; private String scope; private String nodeslist; /** * @throws IOException */ public int doStartTag() ArrayList list = null; try list = (ArrayList) RequestUtils lookup(pageContext nodeslist scope); catch (JspException e ) e printStackTrace(); if (list == null || list size() == ) return SKIP_BODY; JspWriter out = pageContext getOut(); try if (list != null) out println( <select name=\\ Sel_Nodes\\ style=\\ width: %\\ > ); for (int i = ; i < list size(); i++) ResnodesVO nodevo = (ResnodesVO) list get(i); out println( <option value=\\ + nodevo getId() + \\ > + nodevo getSName() + </option> );// System out println(nodevo getSName()); out println( </select> ); out flush(); catch (IOException e) e printStackTrace(); return EVAL_BODY_INCLUDE; public String getId() return id; public void setId(String id) this id = id; public String getNodeslist() return nodeslist; public void setNodeslist(String nodeslist) this nodeslist = nodeslist; public String getScope() return scope; public void setScope(String scope) this scope = scope;
修改struts config xml文件
…… <action mappings> …… <action type= myWeb Action TestAction scope= request path= /queryResnodes > <! 在地址栏或链接中请求时用该路径queryResnodes > <forward name= showResnode path= /Test jsp /> <! 在TestAction java中执行查询数据的函数后 跳转至该showResnode定义的页面 即Test jsp > </action> …… </action mappings> ……
保证Test jsp中包含如下的代码
<%@ taglib uri= /WEB INF/TestTag tld prefix= slotnode %>
<body>
……
<slotnode:selectResnodes id= nodelist nodeslist= resnodesList scope= request />
……
</body> 其中prefix的名字是随便起的 只要有意义就可以 但是在后面用的时候就要用这个名字 本例中是slotnode <slotnode:selectResnodes …… 中的selectResnodes和TestTag tld中定义的<tag><name>selectResnodes</name>……必须是相同的的 另外nodeslist= resnodesList 中resnodesList即TestAction java中定义的 request setAttribute( resnodesList alNodes); 中写入的属性resnodesList 两个名字必须是相同的
比如我的Web应用发布的名字为LearnTag 发布在本地的Tomcat中 默认端口 则在地址栏输入 ?actionType=showNodesList
OK 出来结果了吧
整理的有点乱 再总结一下
从页面发起 do请求 请求转至action 在action文件中执行数据库查询 取得需要的数据
将查询得到的数据列表用setAttribute加入request
自定义标签中取request中的加入的数据列表
由自定义标签中的标签java文件完成将数据打印出来的功能(用JspWriter类)
cha138/Article/program/Java/ky/201311/28770相关参考
以前一直使用jstl标签后来也开始使用struts的一些标签毕竟struts的有些标签使用起来还是比较方便 项目中常常会出现struts标签和jstl标签混和用的情况比如在自定义标签或者在循环标
Struts:自定义taglib的开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 自定义标签
Java自定义简单标签实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Java自定义简单标签可以
JSP的自定义标签 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一基本概念 标签(Tag):
JSP自定义标签执行顺序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先来看一下简单标签接口
JSP自定义标签实现数据字典 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关于JSP标签的好处
这是后台代码 代码 usingSystem; usingSystemCollections; usingSystemConfiguration; usingSystemData; us
详细讲解JSP自定义标签 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
JSP自定义标签开发入门 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一般情况下开发jsp自定
JSP自定义标签入门实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!首先在eclipse下新建一