`

Struts tag解析JSP表达式

阅读更多

在Web Application开发的过程中,经常会遇到Struts,JSP,JS一起使用的情况。

在自定义Struts tag的时候,发现属性值中的JSP表达式没有被解析,原封不动的传了过来。

详情如下:

 

自定义了一个tag,继承org.apache.struts.taglib.html.ButtonTag. 在JSP中使用如下:
<%
String configUrl = "/conf/icp/deleteAction.do";
%>
<icp:button id="abc" class="btn"
      onclick="onDelete(event, '<%=WebUtility.escapeForJSString(configUrl)%>')" >
     	<fmt:message key="delete" bundle="${coreResources}"/>					
</icp:button>


其中onDelete是JS函数。问题是在调用onDelete函数的时候,
'<%=WebUtility.escapeForJSString(configUrl)%>' 没有被解析,原封不动的传了过来。

尝试了把WebUtility.escapeForJSString(configUrl) 放在request中:

 

request.setAttribute("encodedUrl", WebUtility.escapeForJSString(configUrl));

然后,用EL表达式为属性赋值:

 

onclick="onDelete(event, '<c:out value="${encodedUrl}"/>')" >

这样,也不起作用。

后来,想了一个比较tricky的方法。

 

<icp:button id="buttonDelete_<%=i%>" class="btn"
      onclick="onDelete(event, '<%=WebUtility.escapeForJSString(configUrl)%>')" >
   <button id="buttonDelete_<%=i%>"  
 onclick="onDelete(event, '<%=WebUtility.escapeForJSString(configUrl)%>')" >
<fmt:message key="delete" bundle="${coreResources}"/> </button> </icp:button>

 

这样就把<button> tag当做文本text来处理。

 

    public int doEndTag() throws JspException {
        
        parseInnerButtonTag(text);

        ....
   }

    private void parseInnerButtonTag(String str) {
         
        int begin = str.indexOf("id=");
        if (begin < 0) {
            return;
        }
        
        str = str.substring(begin + "id=".length() + 1);
        int end = str.indexOf("\"");
        String id = str.substring(0, end);
        this.setStyleId(id);
        this.setId(id);
        
        begin = str.indexOf("onclick=");
        str = str.substring(begin + "onclick=".length() + 1);
        end = str.indexOf("\"");
        String onclick = str.substring(0, end);
        this.setOnclick(onclick);
        
        
        begin = str.indexOf(">");
        
        end = str.indexOf("</");
        
        text = str.substring(begin + 1, end).trim();
        
    }
 

这样就解决问题了。两种用法都可以。

1) 属性中没有JSP表达式

<icp:button styleId="buttonNext" onclick="changeToDetailTab(2)" property="" styleClass="btn">

         <fmt:message key="nextBtn" bundle="${coreResources}"/>

</icp:button>

2) 属性中有JSP表达式

<icp:button id="buttonDelete_<%=i%>" class="btn"

      onclick="onDelete(event, '<%=WebUtility.escapeForJSString(configUrl)%>')" >

   <button id="buttonDelete_<%=i%>"  

            onclick="onDelete(event, '<%=WebUtility.escapeForJSString(configUrl)%>')" >

       <fmt:message key="delete" bundle="${coreResources}"/>

   </button> 

</icp:button>

 

 

 

分享到:
评论

相关推荐

    struts2+JSP

    4. **JSTL(JavaServer Pages Standard Tag Library)**:标准标签库,提供了一系列标签,简化了常见的JSP编程任务。 **Struts2与JSP结合使用的优势:** 1. **分离关注点**:Struts2负责控制流程,JSP专注于视图...

    struts2 + jsp 简单通讯录

    Struts2 + JSP + MySQL 简单通讯录是一个基于Web的应用程序,它整合了三个核心技术:Apache Struts2框架、JavaServer Pages (JSP) 和 MySQL数据库,用于实现一个用户友好的联系人管理功能。以下是这个项目涉及的关键...

    博客后台管理系统(struts2 + jsp + mysql)

    2. **JSTL(JavaServer Pages Standard Tag Library)**:提供了一系列标准标签,简化JSP页面的编程,例如用于数据处理和流程控制。 3. **DAO(Data Access Object)**:数据访问对象模式,用于封装数据库操作,隔离...

    struts学习案例结合jsp

    通过这个案例,你可以学习到如何设置Struts的环境,编写Action类,配置struts-config.xml,以及如何在JSP中使用Struts标签和EL表达式。此外,你还会了解到如何将Struts和JSP结合,以实现动态网页的MVC架构,这对于...

    struts、jsp资料

    Struts和JSP是Java Web开发中的两个重要技术,它们在构建动态网页和企业级应用程序中扮演着核心角色。Struts是一种基于MVC(Model-View-Controller)设计模式的开源框架,而JSP(JavaServer Pages)则是一种用于创建...

    JSP+Struts+JSTL技术的MVC架构

    JSP(JavaServer Pages)、Struts和JSTL(JavaServer Pages Standard Tag Library)是实现MVC架构的常见技术栈,它们共同为开发者提供了一套强大的工具来构建高效的企业级应用。 **JSP(JavaServer Pages)** 是一...

    Struts2+jsp+jdbc+mysql网址导航项目

    2. **EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)**:通过EL表达式和JSTL标签,可以在JSP中更加简洁地访问和操作数据,减少脚本代码,提高可读性。 **jdbc** (Java Database ...

    Struts2和JSP和J2EE 架包.rar

    `jsp 2.1 api`文档可能详细列出了JSP 2.1版本的API接口,包括指令、元素、表达式语言以及EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)的使用。 J2EE(Java 2 Platform, Enterprise ...

    Struts+hibernate+jsp网上书店系统(购物车)源码

    Struts、Hibernate和JSP是Java Web开发中的三个重要框架,它们共同构成了经典的SSH(Struts、Spring、Hibernate)架构,尽管这里的“SH”是指Struts和Hibernate的组合。这个网上书店系统源码是一个实际应用的示例,...

    Jsp+Struts做的BBS系统

    1. **用户界面**:使用JSP创建用户界面,包括登录、注册、发帖、回帖等页面,JSP中结合EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)来简化页面逻辑。 2. **Struts配置**:定义Action...

    struts1.2、jstl、jsp三种标签教程

    JSTL(JavaServer Pages Standard Tag Library)是Java EE平台的一部分,提供了一系列用于处理常见JSP任务的标签库,如迭代、条件判断、XML处理等,减少了对脚本语言的依赖,使得JSP页面更加清晰、可维护。...

    在tarena培训 struts&jsp上

    Struts和JSP是两种广泛应用于Java Web开发的技术。Struts是一个基于MVC(Model-View-Controller)设计模式的框架,它简化了构建企业级Java Web应用程序的过程。JSP(JavaServer Pages)则是一种动态网页技术,允许...

    myeclipse+struts+jsp网上书店1

    同时,JSP可以通过JSP标签库(Tag Libraries)来使用各种定制的组件,如Struts的标签库,进一步提高开发效率。 在"myeclipse+struts+jsp网上书店1"的项目中,可以推测开发者使用MyEclipse作为开发工具,通过Struts...

    struts2源码解析[归纳].pdf

    这份"struts2源码解析[归纳].pdf"文档显然深入探讨了Struts2的核心组件和工作原理。以下是对其中提到的关键概念的详细解释: 1. **ActionContext**: ActionContext是Struts2中一个非常重要的类,它封装了当前请求...

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理

    Struts2 还提供了一套完整的标签库(Tag Library),支持在JSP页面中使用自定义标签进行数据展示和表单处理。这些标签库极大地提高了Web页面的开发效率,同时保证了代码的清晰和易于管理。 在性能优化方面,Struts2...

    JSP&Struts课件

    - EL是JSP 2.0引入的一种表达式语言,用于简化页面数据的访问和操作,它可以与JSP页面中的Bean对象、Request、Session、Application作用域的数据进行交互。 - JSTL则是一组标准的标签库,包含了核心、SQL、XML、...

    网上书店STRUTS+SQLSERVER+JSP

    在STRUTS框架中,JSP主要负责接收STRUTS转发过来的数据,通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)标签库来展示数据。这种方式让开发者能够专注于页面展示,而不必关心底层...

    jsp到struts2总结.docx

    JSP表达式`&lt;%= %&gt;`会被编译为`servlet.out.write()`,用于输出Java表达式的值。而指令标签如`&lt;%@ page %&gt;`用于定义全局属性,`&lt;%@ include %&gt;`用于包含其他文件,`&lt;%@ taglib %&gt;`则用于引入自定义标签库。 标准JSP...

    struts2 tag 使用实例

    这些标签通常替代了传统的JSP脚本元素,如JSTL和EL表达式,提高了代码的可读性和可维护性。以下是对Struts2标签库及其常用标签的详细解释。 1. HTML标签: - `&lt;s:textfield&gt;`:用于创建输入文本字段,与HTML的`...

    jsp hibernate struts实现购物车试验报告

    同时,我们也掌握了JSP的EL(表达式语言)和JSTL(JavaServer Pages Standard Tag Library)来简化页面逻辑,提高代码的可读性和可维护性。 通过这次实习,我们不仅掌握了技术知识,还锻炼了团队协作和问题解决能力...

Global site tag (gtag.js) - Google Analytics