知识大全 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

相关参考

知识大全 struts2标签与jstl标签的混合使用

  以前一直使用jstl标签后来也开始使用struts的一些标签毕竟struts的有些标签使用起来还是比较方便  项目中常常会出现struts标签和jstl标签混和用的情况比如在自定义标签或者在循环标

知识大全 自定义taglib的开发

Struts:自定义taglib的开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  自定义标签

知识大全 Java自定义简单标签实例

Java自定义简单标签实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Java自定义简单标签可以

知识大全 JSP的自定义标签

JSP的自定义标签  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一基本概念  标签(Tag):

知识大全 JSP自定义标签执行顺序

JSP自定义标签执行顺序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先来看一下简单标签接口

知识大全 JSP自定义标签实现数据字典

JSP自定义标签实现数据字典  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  关于JSP标签的好处

知识大全 html自定义标签

  这是后台代码  代码  usingSystem;  usingSystemCollections;  usingSystemConfiguration;  usingSystemData;  us

知识大全 详细讲解JSP自定义标签

详细讲解JSP自定义标签  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

知识大全 JSP自定义标签开发入门

JSP自定义标签开发入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一般情况下开发jsp自定

知识大全 JSP自定义标签入门实例

JSP自定义标签入门实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!首先在eclipse下新建一