CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

非struts高手不能解决:在action类中如何获取jsp里的一个标签对象

楼主northwolf_sky(似水微蓝)2006-03-01 14:27:24 在 Java / Web 开发 提问

有那为struts高手知道,在action类中如何获取jsp里的一个标签对象,比如一个image标签.我要实现的功能是这样的  
  在jsp页面里有form标签,form中有image   标签   :<html:image   property="image1"   src="abc.gif"/>,submit标签.当提交了表单后.页面有返回到本页面.希望在返回后  
  image   标签的   src   属性能被重新设定为   123.gif.我的想法是在action里获得image标签对象,然后利用image标签对象.setSrc("123.gif")   来设定,然后返回.这种想法可以吗?能获得image标签对象吗?怎样获得image标签对象?或者有没有别的方法.请各位指点迷津.多谢了 问题点数:80、回复次数:33Top

1 楼northwolf_sky(似水微蓝)回复于 2006-03-01 14:30:49 得分 0

知道者.给点代码啊.Thank   you   very   muchTop

2 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-03-01 14:35:58 得分 0

我想没有必要这么复杂吧  
   
  提交表单后,回到原来的页面  
   
  你可以,自己写一段逻辑判断是不是提交后    
   
  然后显示不同图片Top

3 楼zhakeer(扎科尔)回复于 2006-03-01 14:39:07 得分 0

action和jsp之间没有直接的联系,取不到jsp内的对象,只能通过session、request等内建变量传递数据,你可以在action内使用request.setAttribute()设值,然后在jsp页面中取出来Top

4 楼northwolf_sky(似水微蓝)回复于 2006-03-01 15:03:41 得分 0

回复interpb(曾曾胡)   :我的问题的关键在于我必须用到标签自身的setXXX()方法来重新设定原来的某一标签的属性.  
  Top

5 楼sheep219(sheep219)回复于 2006-03-01 15:08:17 得分 0

传个数据过去,回来判断,再改一下图像。不要想太多啊。:)Top

6 楼sheep219(sheep219)回复于 2006-03-01 15:09:02 得分 0

不要用标签就可以了。不是说struts一定要用标签的。Top

7 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-03-01 15:10:56 得分 0

那你就把这个数据传过来  
   
  然后set不久可以了吗Top

8 楼northwolf_sky(似水微蓝)回复于 2006-03-01 15:12:10 得分 0

回复zhakeer(扎科尔):  
  在action内使用request.setAttribute()设值,然后在jsp页面中取出来做得到.我的问题是在jsp页面上   必须用tag.setXXX(param)设定,关键在于在jsp   在样取得一个tag实例然后set  
  Top

9 楼northwolf_sky(似水微蓝)回复于 2006-03-01 15:14:05 得分 0

怎么set,标签对象是有set方法的.但在set以前怎样写?  
  Top

10 楼northwolf_sky(似水微蓝)回复于 2006-03-01 15:16:05 得分 0

我的问题是,必须用标签而且在提交以后用标签的setXXX来修改标签的属性值.Top

11 楼jimmybinbin()回复于 2006-03-01 15:20:52 得分 0

给你个参考:  
  <logic:iterate   name="log"   id="log"   type="com.*.FormBean">  
        <%String   logC   =     log.getLogC();%>  
  </logic>  
  注:我封装在这个循环里的对象就是那个FORMBEAN!Top

12 楼jfy3d(剑事 http://www.migti.com)回复于 2006-03-01 15:23:17 得分 0

反过来想啊     jsp从action取图片路径Top

13 楼northwolf_sky(似水微蓝)回复于 2006-03-01 15:26:13 得分 0

<%String   logC   =     log.getLogC();%>   是什么意思?  
  Top

14 楼jimmybinbin()回复于 2006-03-01 15:30:20 得分 0

<%String   logC   =     log.getLogC();%>   是什么意思?  
  就是FORMBEAN里面定义的方法啊,SET   和GET方法啊Top

15 楼northwolf_sky(似水微蓝)回复于 2006-03-01 15:39:24 得分 0

你没明白我的意思.我的意思是在当页面提交了以后设定某一标签的某种属性值.比如image标签的src   .而且必须用到   image对象的setSrc(param);现在的问题是怎样对原来的标签进行这种操作,要怎样才能获得当前image标签的实例呢Top

16 楼zhakeer(扎科尔)回复于 2006-03-01 15:59:39 得分 0

最简单的写法:  
  action:  
  request.setAttribute("aaa","aaa.gif");  
  jsp:  
  <html:image   property="..."   src="<%=request.getAttribute("aaa")%>"/>  
  需要什么判断可以再往上加,不想用<%...%>的话,可以用el表达式Top

17 楼northwolf_sky(似水微蓝)回复于 2006-03-01 16:07:53 得分 0

回复:zhakeer(扎科尔)    
  最简单的写法:  
  action:  
  request.setAttribute("aaa","aaa.gif");  
  jsp:  
  <html:image   property="..."   src="<%=request.getAttribute("aaa")%>"/>  
  需要什么判断可以再往上加,不想用<%...%>的话,可以用el表达式  
   
  ==========================  
  我这里不能这样做啊,老兄  
  Top

18 楼zhmain(小胖)回复于 2006-03-01 16:20:59 得分 0

在action中  
  request.setAttribute("flag","x.gif");  
  jsp中  
  <logic:present   name="flag"   scope="request">  
  <logic:equal   name="flag"   value="x.gif"   scope="request">  
  set  
  </logic:equal>  
  </logic:present>Top

19 楼zhakeer(扎科尔)回复于 2006-03-01 16:23:34 得分 0

为什么Top

20 楼northwolf_sky(似水微蓝)回复于 2006-03-01 16:43:02 得分 0

我们在做一个标签库的测试.这个标签库是我们继承nested的,个别方法我们复写了.例如   image标签我可以给大家代码  
  /**  
    *   プロジェクト名                     :DENSO  
    *   内部設計担当者                     :胡正元  
    *   作成日                                   :2006/1/06  
    *  
    *   バージョン             更新日             開発担当者(承認者)               更新内容  
    *   01.00.00           2006/1/09    田志軍                  新規作成  
    *  
    *   (c)   Copyright   XXXXXXXX,   Ltd.   XXXX.   All   rights   reserved.  
  */  
  package   com.globaldenso.applibase.a000a01000c.taglib;  
   
  import   java.util.HashMap;  
   
  import   javax.servlet.http.HttpServletRequest;  
   
  import   org.apache.struts.taglib.html.Constants;  
  import   org.apache.struts.taglib.nested.NestedPropertySupport;  
  import   org.apache.struts.taglib.nested.html.NestedImageTag;  
  import   org.apache.struts.util.ResponseUtils;  
   
  import   com.globaldenso.applibase.a000a01000c.action.A000C01000BaseValidatorForm;  
  import   com.globaldenso.applibase.a000a01000c.misc.A000C01000StringUtil;  
   
   
        /**  
  *   イメージ表示タグクラス<br>  
  *   StrutsからNestedImageTagクラスを継承する<br>  
  *  
  *   ImageTagは以下の機能を有する.<br>  
  *   (1)属性を追加<br>  
  *   (2)サニタイジングを行う<br>  
  *   サニタイジングの対象とする文字は,「<」「>」「&」「"」「'」とする<br>  
  *   @author                             田志軍  
  *   @version                           01.00.00  
  */  
  public   class   A000C01000ImageTag   extends   NestedImageTag  
          implements   NestedPropertySupport   {  
   
  /**  
    *   終了タグを作成する<br>  
    *   タグの生成時に指定されたフィールドに属性を追加する親クラスのgetElementCloseを呼び出す<br>  
    *  
    *   @param なし  
    *   @return 組み合わせったStrings  
    *   @throws なし  
    */  
        protected   String   getElementClose()   {  
          /*   終わる標識を保存するStringBufferを声明する   */  
          StringBuffer   sb   =   new   StringBuffer();  
   
          /*   動的追加の組み合わせったStringを声明する   */  
          String   attribute   =   null;  
   
          //   **************************************************   //  
          //   1.   コンテキストからリクエストを取得する  
          //<INPUT>Context  
          //   **************************************************   //  
          HttpServletRequest   request   =   (HttpServletRequest)   pageContext.getRequest();  
   
          //   **************************************************   //  
          //   2.   リクエストからFormを取得する  
          //<INPUT>HttpServletRequest  
          //   **************************************************   //  
          A000C01000BaseValidatorForm   form   =   (A000C01000BaseValidatorForm)   request.getAttribute(Constants.BEAN_KEY);  
   
          //   **************************************************   //  
          //   3.   Formから追加の対象を取得する  
          //   **************************************************   //  
          HashMap   mapAttribute   =   form.getAttribute();  
   
          //   **************************************************   //  
          //   4.   追加の対象を遍歴して,一つ循環中に,親クラスのgetPropertyを呼ぶ出して  
          //      取得したnameがキーとして,  
          //  propertyキーとしてとvalueを持つHashMapを取得して,  
          //  html言語(property="value")の形式にして,StringBufferに追加する  
          //   **************************************************   //  
          if   (mapAttribute   !=   null)   {  
                  /*   propertyとnameを持つHashMapを取得する   */  
                  HashMap   mapProperty   =   (HashMap)   mapAttribute.get(getProperty());  
   
                  /*   Stringを組み合わせる   */  
                  attribute   =   A000C01000StringUtil.getTagPropertyString(mapProperty);  
   
                  /*   StringBufferに以上組み合わせったStringを追加する   */  
                  sb.append(attribute);  
          }  
   
          //   **************************************************   //  
          //   5.   親クラスでのgetElementCloseを呼び出し,戻されたStringをStringBufferに追加する  
          //   **************************************************   //  
          sb.append(super.getElementClose());  
   
          //   **************************************************   //  
          //   6.   組み合わせたStringBufferからStringを取得し,戻る  
          //   **************************************************   //  
          return   sb.toString();  
  }  
   
  /**  
    *   Altをセット   <br>  
    *   サニタイジングを行いて,altをセットする  
    *  
    *   @param   String   alt  
    *   @return     void  
    * なし  
    *   @throws     なし  
    */  
  public   void   setAlt(String   alt)   {  
          //   **************************************************   //  
          //   1.   RequestUtilsのフィルタを使って,altをフィルタして,  
          //    パラメータとして親クラスでのsetAltを呼び出す  
          //   **************************************************   //  
          super.setAlt(ResponseUtils.filter(alt));  
  }  
   
  /**  
    *   Srcをセット   <br>  
    *   サニタイジングを行いて,srcをセットする  
    *  
    *   @param   String   src  
    *   @return     void  
    * なし  
    *   @throws     なし  
    */  
  public   void   setSrc(String   src)   {  
          //   **************************************************   //  
          //   1.   RequestUtilsのフィルタを使って,srcをフィルタして,  
          //    パラメータとして親クラスでのsetSrcを呼び出す  
          //   **************************************************   //  
                  super.setSrc(ResponseUtils.filter(src));  
          }  
  }  
  Top

21 楼northwolf_sky(似水微蓝)回复于 2006-03-01 16:46:53 得分 0

上面Method   setSrc()   对父类进行了复写.我现在要测试方法setSrc(),我们的测试是一个web应用来测,将来直接看页面解析后的html   souceTop

22 楼zhakeer(扎科尔)回复于 2006-03-01 17:04:55 得分 0

上面Method   setSrc()   对父类进行了复写.我现在要测试方法setSrc(),我们的测试是一个web应用来测,将来直接看页面解析后的html   souce  
  -----------------------------------------------  
  不明白这和你的要求有什么关系,如果仅仅是测试Method   setSrc(),直接在jsp内用标签就可以了,不需要在action里直接调用啊Top

23 楼northwolf_sky(似水微蓝)回复于 2006-03-01 17:14:01 得分 0

测试流程是这样一来的.页面第一次打开显示image   图片,提交后此image标签显示另一个图片,要通过setSrc()   指定图片名Top

24 楼northwolf_sky(似水微蓝)回复于 2006-03-01 17:16:08 得分 0

现在的问题是怎样在使用setSrc,这一代码该怎样写.怎样来控制页面上image标签Top

25 楼northwolf_sky(似水微蓝)回复于 2006-03-01 17:19:06 得分 0

setSrc(),只是测试的一个case而已Top

26 楼zhakeer(扎科尔)回复于 2006-03-01 17:19:26 得分 0

标签<html:image   property="image1"   src="abc.gif"/>中的src属性会自动调用Method   setSrc(),你用eclipse、intellij这些编辑器的debug工具调试一下就知道了  
  Top

27 楼northwolf_sky(似水微蓝)回复于 2006-03-01 17:26:26 得分 0

我当然知道,也可以正常显示.现在是setSrc   方法复写了要测,用web应用该怎么测Top

28 楼northwolf_sky(似水微蓝)回复于 2006-03-01 17:27:21 得分 0

zhakeer(扎科尔)   ,谢了Top

29 楼northwolf_sky(似水微蓝)回复于 2006-03-01 18:53:39 得分 0

绝望了  
  Top

30 楼doway(john)回复于 2006-03-01 19:28:33 得分 0

楼主不明白基本的工作原理啊。  
   
   
  Web   容器是一种框架结构,框架的一个基本原理被称为反向控制,也叫好莱坞原则——你不要给我打电话,我会打给你。以代码来说,就是你不要调用我,我会调用你的。  
   
  应用服务器是整个   J2EE   框架的主人,应用服务器接到请求,开始调用相应的代码,所有的   Servlet   和   JSP   都是被它调用的。在   Struts   中,真正的   Servlet   只有一个,就是写在   web.xml   中的那个,通常称之为元控制器。元控制器又是   Struts   这个框架的主人,我们写的   Action   是由它调用的。  
   
  元控制器的主流程中,如果我们采用正常的流程时,主流程首先会将请求交给   Action   处理,这时候,JSP   中的标签尚未构建呢,又怎么可能访问它们呢?  
   
  或者楼主会问,为什么尚未构建?JSP   将会被编译为一个   Servlet,JSP   页面中的大部分代码,都处于该   Servlet   的   doGet/doPost   方法中,标签实际上是一些类,我猜想这些类将在该方法中被实例化,这是最自然不过的方式。如果是这样,那么楼主就是想在主流程的前边调用的一个方法中,试图访问该流程后边将要调用的一个方法中的局部变量。那是不可能的,不是吗?  
   
  即使标签不是局部变量,而是   JSP   编译后的   Servlet   的实例成员,楼主要想访问它们,也必须首先获得对那个编译出来的   Servlet   的实例的引用。有可能吗?至少我是从未听说过的。  
   
  最后,怪异的需求往往都是由于忽视基本工作原理导致的。  
   
  :)  
  Top

31 楼northwolf_sky(似水微蓝)回复于 2006-03-02 11:25:08 得分 0

不是不可以,本人已经实现了.如下  
  <%  
  if(session.getValue("SubmitAready")   ==   null)   {  
  %>  
  <denso:ImageTag   property="image1"     src="/DensoTagSampleApp/images/jituan.gif"   />  
   
  <%  
  }   else   {  
      String   strSrc   =   new   String("/DensoTagSampleApp/images/DZ1.JPG");  
      com.globaldenso.applibase.a000a01000c.taglib.A000C01000ImageTag   imageTag   =   (com.globaldenso.applibase.a000a01000c.taglib.A000C01000ImageTag)   _jspx_tagPool_denso_ImageTag_src_property_nobody.get(com.globaldenso.applibase.a000a01000c.taglib.A000C01000ImageTag.class);  
                              imageTag.setPageContext(pageContext);  
                              imageTag.setParent((javax.servlet.jsp.tagext.Tag)   _jspx_th_wacs$1html_form_0);  
                              imageTag.setProperty("image1");  
                              imageTag.setSrc(strSrc);  
                              int   jspx_eval_denso_ImageTag_1   =   imageTag.doStartTag();  
                              if   (imageTag.doEndTag()   ==   javax.servlet.jsp.tagext.Tag.SKIP_PAGE)  
                                  return;  
                              _jspx_tagPool_denso_ImageTag_src_property_nobody.reuse(imageTag);  
  }  
  %>Top

32 楼doway(john)回复于 2006-03-02 13:24:45 得分 0

GX   一个先。  
   
  但是这代码太难看了,不只是样子难看。:)  
  Top

33 楼lifecat0626(大笨笨猫)回复于 2006-03-02 14:12:45 得分 0

返回的时候进行刷新,就会恢复到初始状态的Top

相关问题

  • struts 标签与jsp语句的区别?
  • jsp页面struts标签引入错误!
  • 如何在js里获取struts的文本标签里的值
  • 不用Struts框架在JSP里能不能用Struts标签?
  • struts 标签
  • struts标签
  • struts 标签
  • 【struts标签问题】java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagExtraInfo
  • struts多维数组怎么用标签显示在JSP?
  • struts:在action中如何往response中加入JSP标签

关键词

  • 页面
  • 属性
  • 代码
  • struts
  • 框架
  • 控制器
  • jsp
  • する
  • 标签
  • a000

得分解答快速导航

  • 帖主:northwolf_sky

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo