`
vyloy
  • 浏览: 78951 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

使Struts<select>标签的headerValue属性值支持嵌套jsp表达式实战

阅读更多
背景:由于公司国际化项目需要,而系统在最初开发时,完全没考虑过将来要做国际化。采用的是硬编码的模式,单需要修改的jsp页面就达170多个,可谓任重道远啊。后来经过编写批量提取工具提取,大约有4000多处直接写中文的地方需要修改。懒人自有妙懒人计。编个工具批量提取替换呗。

难题:struts 的 select 标签的 headerValue 属性值不支持使用jsp表达式

org.apache.jasper.JasperException: /service/service_manager.jsp(42,7) According to TLD or attribute directive in tag file, attribute headerValue does not accept any expressions
	at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
	at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
	at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1172)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:819)
	at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1507)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2338)
	at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2388)
	at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2394)
	at org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2338)
	at org.apache.jasper.compiler.Validator.validate(Validator.java:1737)
	at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:178)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:306)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:316)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


解决方案:暴力修改jboss的jsp编译检验过程,使struts<s:select headerValue>支持jsp表达式<%=%>

实战过程:
到http://nchc.dl.sourceforge.net/project/jboss/JBoss/JBoss-4.2.3.GA/jboss-4.2.3.GA-src.tar.gz下载源码

主要的源文件是Japser的/Japser/src/org/apache/jasper/compiler/Validator.java

} else {
    // Attribute does not accept any expressions.
    // Make sure its value does not contain any.
                            
    if (expression) {
        err.jspError(n, "jsp.error.attribute.custom.non_rt_with_expr",
            tldAttrs[j].getName());
    }
    jspAttrs[i] = new Node.JspAttribute(tldAttrs[j],
        attrs.getQName(i), attrs.getURI(i), attrs
        .getLocalName(i),
    attrs.getValue(i), false, null, false);
}

修改为:
} else {
    // Attribute does not accept any expressions.
    // Make sure its value does not contain any.
                            
    if (expression) {
		String value = attrs.getValue(i);
            if("headerValue".equals(attrs.getQName(i))&&value.startsWith("<%=")&&value.endsWith("%>")){
            jspAttrs[i] = getJspAttribute(tldAttrs[j],
            attrs.getQName(i), attrs.getURI(i),                                
			attrs.getLocalName(i), attrs
            .getValue(i), String.class, n,
            false);
            found = true;
            break;
        }
        err.jspError(n, "jsp.error.attribute.custom.non_rt_with_expr",
            tldAttrs[j].getName());
    }
    jspAttrs[i] = new Node.JspAttribute(tldAttrs[j],
        attrs.getQName(i), attrs.getURI(i), attrs
        .getLocalName(i),
    attrs.getValue(i), false, null, false);
}


把Japser项目,编译后替换\server\default\deploy\jboss-web.deployer目录下jbossweb.jar文件即可
分享到:
评论

相关推荐

    struts2 <s:if>标签使用

    struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用

    struts<optionsCollection>应用文档+实例

    struts&lt;optionsCollection&gt;应用文档+实例,我相信会给大家到来帮助

    JSP网络编程从基础到实践

    实例56 用HTML表单设置JavaBean的属性值&lt;br&gt; 实例57 计数器JavaBean&lt;br&gt; 实例58 查询数据库JavaBean&lt;br&gt; 实例59 购物车JavaBean及其应用&lt;br&gt; 实例60 数据库记录分页操作JavaBean&lt;br&gt;Servlet技术&lt;br&gt; 实例61 JSP与...

    struts标签 <write><logic>

    可以直接运行 , 可以editplues 也可以看内容

    struts_jstl

    &lt;/tr&gt;&lt;br&gt; &lt;/c:forEach&gt;&lt;br&gt; &lt;/table&gt;&lt;br&gt; &lt;p&gt;&lt;br&gt; &lt;li&gt;循环控制标签:c:foreach&lt;/li&gt;&lt;br&gt;&lt;br&gt; &lt;table border="1"&gt;&lt;br&gt; &lt;tr&gt;&lt;br&gt; &lt;td&gt;姓名&lt;/td&gt;&lt;br&gt; &lt;td&gt;年龄&lt;/td&gt;&lt;br&gt; &lt;td&gt;所属组&lt;/td&gt;&lt;br&gt; &lt;/tr&gt;&lt;br&gt; &lt;c:forEach var...

    MLDN框架笔记大全

    MLDN框架笔记大全&lt;br&gt;JSP+JDBC_假分页 &lt;br&gt;02 JSP+JDBC_真分页(基于MySQL数据库分页) &lt;br&gt;03 JSP+DAO和MVC+DAO(基于MySQL数据库分页) &lt;br&gt;04 Struts入门 &lt;br&gt;05 使用Struts + DAO完成用户登陆 &lt;br&gt;06 Struts标签-...

    struts框架jar包

    struts-1.3.8 包(&lt;br&gt;&lt;br&gt;antlr-2.7.2.jar&lt;br&gt;bsf-2.3.0.jar&lt;br&gt;commons-beanutils-1.7.0.jar&lt;br&gt;commons-chain-1.1.jar&lt;br&gt;commons-digester-1.8.jar&lt;br&gt;commons-fileupload-1.1.1.jar&lt;br&gt;commons-io-1.1.jar&lt;br&gt;...

    Struts所有标签详解

    里面包括&lt;html&gt;&lt;bean&gt;&lt;logic&gt;&lt;tiles&gt;&lt;nested&gt;&lt;br&gt;五组标签库的详细讲解,每个标签库都对应着&lt;br&gt;相应的例子(标签多的标签库有两个例子)。&lt;br&gt;另外还有国际化(文字国际化/图片国际化)、&lt;br&gt;表单验证,以及验证...

    jive.chm

    1 应用Struts的网站建设 &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;Java基础&lt;br&gt; 1 20个Java基础Tips &lt;br&gt; 2 abstract,static,final修饰符 &lt;br&gt; 3 ChinaUnix.net Java精华贴 &lt;br&gt; 4 ANT学习笔记 &lt;br&gt; 5 极度性能调整 &lt;br&gt;&lt;br&gt; &lt;br&gt;FAQs&lt;br&gt;...

    JSP+ACCESS毕业设计 网上书店系统 源码+论文

    &lt;br&gt;3-3 Struts的工作流程&lt;br&gt;第三章 网上书店详细设计&lt;br&gt;3-1 需求分析&lt;br&gt;3-2 总体设计&lt;br&gt;3-3 功能设计&lt;br&gt;3-4 数据库设计与实现&lt;br&gt;3-4-1 数据库的需求分析&lt;br&gt;3-4-2 创建数据表的脚本&lt;br&gt;3-5 网上书店基本流程...

    Struts2 入门培训

    配置FILTERDISPATCHER过滤器 6&lt;br&gt;2.3. 配置STRUTS.PROPERTIES 6&lt;br&gt;2.4. 编写一个简单的ACTION类 7&lt;br&gt;2.5. STRUTS.XML配置文件 8&lt;br&gt;2.6. 在相应位置提供JSP文件 10&lt;br&gt;2.7. 转换器(CONVERTER) 10&lt;br&gt;2.8. 拦截...

    <S:select>用法

    Address private int aid; private String aname; public int getAid() { ... &lt;s:select name="address" headerKey="-1" headerValue="请选择" list="lis" listKey="aid" listValue="aname" /&gt; &lt;/s:form&gt;

    struts2.0中文教程

    &lt;br&gt;04 在Struts 2.0中国际化(i18n)您的应用程序&lt;br&gt;05 转换器(Converter)——Struts 2.0中的魔术师&lt;br&gt;06 在Struts 2.0中实现表单数据校验(Validation)&lt;br&gt;07 Struts 2的基石——拦截器(Interceptor)&lt;br&gt;08 ...

    struts2-指南

    — Web 应用的发展&lt;br&gt;— Model 1 和Model 2&lt;br&gt;— MVC 思想&lt;br&gt;— MVC 模式的优势&lt;br&gt;— 常用MVC 框架及其特征&lt;br&gt;— Struts 1 的基本结构及其存在的问题&lt;br&gt;— WebWork 的基本结构&lt;br&gt;— Struts 2 的起源&lt;br&gt;— ...

    struts2整合spring2的配置

    1. 导入的包&lt;br&gt;&lt;br&gt;l struts2的五个基础包:commons-logging-1.1.jar;...&lt;br&gt;&lt;br&gt;xwork-2.0.0.jar.&lt;br&gt;&lt;br&gt;l spring的核心包:spring.jar&lt;br&gt;&lt;br&gt;l 二者集成开发所需的包:struts-spring-plugin-2.0.6.jar&lt;br&gt;

    Struts+Spring+Hibernate实现上传下载(MyEclipse版)

    在天极网看了一篇用JBuilder实现的“Struts+... &lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt;所用软件或包的版本: &lt;br&gt;Struts 1.2 &lt;br&gt;Spring 1.2.8 &lt;br&gt;Hibernate 3.1 &lt;br&gt;Oracle 9i &lt;br&gt;MyEclipse4.1.1 &lt;br&gt;&lt;br&gt;具体代码如下: &lt;br&gt;TFile类:

    MyEclipse 6 Java EE 开发中文手册 第九章完整

    第九章 开发Struts 1.x应用 145&lt;br&gt;9.1 介绍 145&lt;br&gt;9.2 创建Struts项目 147&lt;br&gt;9.2.1 创建Web项目 148&lt;br&gt;9.2.2 加入 Struts开发功能 148&lt;br&gt;9.3 使用Struts工具 150&lt;br&gt;9.3.1 Struts配置文件编辑器 150&lt;br&gt;9.3.2 ...

    java文集

    正则表达式&lt;br&gt;lucene索引合并&lt;br&gt;探查Weblogic JDBC Multipool 问题 &lt;br&gt;struts通用Exception处理 &lt;br&gt;Grails中默认数据库HSQLDB点滴&lt;br&gt;从request获取各种路径总结&lt;br&gt;DIV实现的表格自动伸张与收缩&lt;br&gt;java 邮件...

    java技术员必下的最强大的插件,搜索JSmart_1.3.1.jar(寻觅插件)然后下载

    &lt;br&gt;3、如果涉及到新建JSP页面,注意在新建文件时选择'寻觅插件'下的向导,可以快速构建JSP列表页面.&lt;br&gt;&lt;br&gt;&lt;br&gt;主要功能:&lt;br&gt;1、SSH框架一键配置&lt;br&gt;2、JSP列表标签导入及JSP页面列表快速生成(内置两套开源标签)...

    java开发者必用的插件,搜索JSmart_1.3.1.jar(寻觅插件)然后下载

    &lt;br&gt;3、如果涉及到新建JSP页面,注意在新建文件时选择'寻觅插件'下的向导,可以快速构建JSP列表页面.&lt;br&gt;&lt;br&gt;&lt;br&gt;主要功能:&lt;br&gt;1、SSH框架一键配置&lt;br&gt;2、JSP列表标签导入及JSP页面列表快速生成(内置两套开源标签)...

Global site tag (gtag.js) - Google Analytics