Denis's Java Library

          The only documentation is the code itself

          自定義標(biāo)簽獲取struts中action的全部路徑(原創(chuàng))

                由于項(xiàng)目里面由需要一個(gè)form可以提交多個(gè)action(本來(lái)可以用 dispatch值來(lái)實(shí)現(xiàn),后來(lái)考慮到要使用validator框架驗(yàn)證)。后來(lái)考慮的方案為使用js來(lái)控制form的流向,例如
                
          form.action='/bookstore/checkId.do'

          不過(guò)新的問(wèn)題來(lái)了!如何能不用hardcode而拿到我要的action的實(shí)際路徑呢?比如我定義的struts-config文件里面的action是 
          path="/checkId"
          但是實(shí)際解釋后的path是:
          action='/bookstore/checkId.do'
          前 綴和后面的后綴.do都是根據(jù)你的項(xiàng)目部署的路徑和你在web.xml中配置的mapping的后綴有關(guān)系,如果我把內(nèi)容寫(xiě)死到j(luò)sp中那以后我要是想把 checkId.do改成checkId.action那就要更改jsp,由于struts本來(lái)提供的幾個(gè)taglib里面的

          <html:form action="/checkId" >

          綜合了一下決定還是自己寫(xiě)個(gè)taglib來(lái)實(shí)現(xiàn),其實(shí)只需要照著struts 中的 FormTag.java 文件依葫蘆畫(huà)瓢就可以了,一下為本人的代碼部分

          StrutsActionCustomTag.java
          package com.denis.framework.common.taglib.strutsActionExt;

          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.jsp.JspException;
          import javax.servlet.jsp.tagext.TagSupport;

          import org.apache.struts.taglib.TagUtils;

          public class StrutsActionCustomTag extends TagSupport {

              
          protected String actionName = null;
              
              
          public String getActionName() {
                  
          return actionName;
              }


              
          public void setActionName(String actionName) {
                  
          this.actionName = actionName;
              }


              
          public int doStartTag() throws JspException {

                  StringBuffer results 
          = new StringBuffer();
                  HttpServletResponse response 
          =
                      (HttpServletResponse) 
          this.pageContext.getResponse();
                  
                  results.append(response.encodeURL( TagUtils.getInstance().getActionMappingURL( 
          this.actionName , this.pageContext)) );

                  TagUtils.getInstance().write(pageContext, results.toString());

                  
          return (EVAL_BODY_INCLUDE);
              }


              
          public void release() {
                  
          super.release();
                  
          this.actionName = null ;

              }

          }


          tld定義部分

          framework-struts.tld
          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
          <taglib>

          <tlibversion>1.0</tlibversion>
          <jspversion>1.1</jspversion>
          <shortname>framework</shortname>
          <uri>http://www.denisFramework.org/Framework-Tag</uri>
          <tag>
          <name>getActionUrl</name>
          <tagclass>com.denis.framework.common.taglib.strutsActionExt.StrutsActionCustomTag</tagclass>
          <bodycontent>empty</bodycontent>
          <attribute>
          <name>actionName</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
          </attribute>
          </tag>

          </taglib>


          ok ! 直接在jsp中如下使用即可取到action的真正路徑

           
          <%@ page language="java"%>
          <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> 
          <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
          <%@ taglib uri="/WEB-INF/framework-struts.tld" prefix="framework" %>
           
          <html> 
              
          <head>
                  
          <title>JSP for loginForm form</title>
              
          </head>
              
          <body>
                  
          <framework:getActionUrl actionName="login" />
                  
          <html:form action="/login">
                      name : 
          <html:text property="name"/><html:errors property="name"/><br/>
                      password : 
          <html:password property="password"/><html:errors property="password"/><br/>
                      
          <html:submit/><html:cancel/>
                  
          </html:form>
              
          </body>
          </html>


          大家要是有更好的解決方法希望能指正!謝謝!

          posted on 2005-11-10 13:24 DenisLing 閱讀(1139) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): struts


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 玛多县| 康定县| 海城市| 涡阳县| 东兴市| 许昌县| 横峰县| 广宁县| 铁力市| 全椒县| 盘锦市| 白朗县| 同心县| 织金县| 湖南省| 仪陇县| 揭阳市| 滨州市| 灵石县| 晋州市| 囊谦县| 娄底市| 保靖县| 屏南县| 嘉义市| 于都县| 峨山| 江陵县| 庄河市| 都匀市| 南陵县| 洪雅县| 神池县| 太康县| 固镇县| 平原县| 鹤峰县| 定安县| 康定县| 云阳县| 威远县|