在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>
分享到:
相关推荐
4. **JSTL(JavaServer Pages Standard Tag Library)**:标准标签库,提供了一系列标签,简化了常见的JSP编程任务。 **Struts2与JSP结合使用的优势:** 1. **分离关注点**:Struts2负责控制流程,JSP专注于视图...
Struts2 + JSP + MySQL 简单通讯录是一个基于Web的应用程序,它整合了三个核心技术:Apache Struts2框架、JavaServer Pages (JSP) 和 MySQL数据库,用于实现一个用户友好的联系人管理功能。以下是这个项目涉及的关键...
2. **JSTL(JavaServer Pages Standard Tag Library)**:提供了一系列标准标签,简化JSP页面的编程,例如用于数据处理和流程控制。 3. **DAO(Data Access Object)**:数据访问对象模式,用于封装数据库操作,隔离...
通过这个案例,你可以学习到如何设置Struts的环境,编写Action类,配置struts-config.xml,以及如何在JSP中使用Struts标签和EL表达式。此外,你还会了解到如何将Struts和JSP结合,以实现动态网页的MVC架构,这对于...
Struts和JSP是Java Web开发中的两个重要技术,它们在构建动态网页和企业级应用程序中扮演着核心角色。Struts是一种基于MVC(Model-View-Controller)设计模式的开源框架,而JSP(JavaServer Pages)则是一种用于创建...
JSP(JavaServer Pages)、Struts和JSTL(JavaServer Pages Standard Tag Library)是实现MVC架构的常见技术栈,它们共同为开发者提供了一套强大的工具来构建高效的企业级应用。 **JSP(JavaServer Pages)** 是一...
2. **EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)**:通过EL表达式和JSTL标签,可以在JSP中更加简洁地访问和操作数据,减少脚本代码,提高可读性。 **jdbc** (Java Database ...
`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是Java Web开发中的三个重要框架,它们共同构成了经典的SSH(Struts、Spring、Hibernate)架构,尽管这里的“SH”是指Struts和Hibernate的组合。这个网上书店系统源码是一个实际应用的示例,...
1. **用户界面**:使用JSP创建用户界面,包括登录、注册、发帖、回帖等页面,JSP中结合EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)来简化页面逻辑。 2. **Struts配置**:定义Action...
JSTL(JavaServer Pages Standard Tag Library)是Java EE平台的一部分,提供了一系列用于处理常见JSP任务的标签库,如迭代、条件判断、XML处理等,减少了对脚本语言的依赖,使得JSP页面更加清晰、可维护。...
Struts和JSP是两种广泛应用于Java Web开发的技术。Struts是一个基于MVC(Model-View-Controller)设计模式的框架,它简化了构建企业级Java Web应用程序的过程。JSP(JavaServer Pages)则是一种动态网页技术,允许...
同时,JSP可以通过JSP标签库(Tag Libraries)来使用各种定制的组件,如Struts的标签库,进一步提高开发效率。 在"myeclipse+struts+jsp网上书店1"的项目中,可以推测开发者使用MyEclipse作为开发工具,通过Struts...
这份"struts2源码解析[归纳].pdf"文档显然深入探讨了Struts2的核心组件和工作原理。以下是对其中提到的关键概念的详细解释: 1. **ActionContext**: ActionContext是Struts2中一个非常重要的类,它封装了当前请求...
Struts2 还提供了一套完整的标签库(Tag Library),支持在JSP页面中使用自定义标签进行数据展示和表单处理。这些标签库极大地提高了Web页面的开发效率,同时保证了代码的清晰和易于管理。 在性能优化方面,Struts2...
- EL是JSP 2.0引入的一种表达式语言,用于简化页面数据的访问和操作,它可以与JSP页面中的Bean对象、Request、Session、Application作用域的数据进行交互。 - JSTL则是一组标准的标签库,包含了核心、SQL、XML、...
在STRUTS框架中,JSP主要负责接收STRUTS转发过来的数据,通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)标签库来展示数据。这种方式让开发者能够专注于页面展示,而不必关心底层...
JSP表达式`<%= %>`会被编译为`servlet.out.write()`,用于输出Java表达式的值。而指令标签如`<%@ page %>`用于定义全局属性,`<%@ include %>`用于包含其他文件,`<%@ taglib %>`则用于引入自定义标签库。 标准JSP...
这些标签通常替代了传统的JSP脚本元素,如JSTL和EL表达式,提高了代码的可读性和可维护性。以下是对Struts2标签库及其常用标签的详细解释。 1. HTML标签: - `<s:textfield>`:用于创建输入文本字段,与HTML的`...
同时,我们也掌握了JSP的EL(表达式语言)和JSTL(JavaServer Pages Standard Tag Library)来简化页面逻辑,提高代码的可读性和可维护性。 通过这次实习,我们不仅掌握了技术知识,还锻炼了团队协作和问题解决能力...