`
vyloy
  • 浏览: 80379 次
  • 性别: 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文件即可
分享到:
评论

相关推荐

    Struts_2_标签库(文档手册)_Tags-API-CLSW-JSP

    类似于Struts 1.x中的`&lt;bean&gt;`标签,用于在JSP页面中访问和操作JavaBean对象的属性。 #### `&lt;s:checkbox&gt;` 和 `&lt;s:checkboxlist&gt;` 标签 分别用于生成单个复选框和复选框列表,支持数据绑定和值列表选择。 #### `...

    struts2 OGNL 表达式及各种标签的使用

    - `&lt;s:property&gt;`:用于显示对象的属性值,如`&lt;s:property value="user.name" /&gt;`。 - `&lt;s:set&gt;`:用于设置变量,如`&lt;s:set var="myVar" value="user.name" /&gt;`。 - `&lt;s:if&gt;`和`&lt;s:else&gt;`:基于OGNL表达式的条件...

    struts2_标签使用方法.doc

    在Struts2中,不再像Struts1.x那样将标签库分为html、bean、logic和tiles等类别,而是统一使用一个`&lt;s&gt;`前缀的标签库,只需在JSP页面头部引入`&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;`即可使用所有标签。...

    重要知识struts2标签说明.pdf

    这些只是Struts2标签库的一部分,实际上还有更多如`&lt;s:form&gt;`, `&lt;s:select&gt;`, `&lt;s:textarea&gt;`等标签,它们分别用于表单处理、选择列表和文本区域等。Struts2的标签库大大简化了JSP页面的编写,提高了代码的可维护性...

    struts2标签大全

    14. **s:include标签**:包含其他JSP页面,类似于JSP的&lt;jsp:include&gt;,但支持动态参数传递。 15. **s:url标签**和**s:a标签**:创建链接,s:url用于构建URL,s:a则用于创建超链接,支持动态参数和Action调用。 16....

    Java struts2 ongl 标签 jsp页面

    例如,在提供的代码片段中,可以看到`&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;`引入了Struts2的标签库,这使得在JSP中可以方便地使用OGNL表达式来操作页面上的Java对象。 ```jsp &lt;%request.setAttribute("sex",...

    Struts标签库查询手册

    - 在JSP页面中引入Struts标签库,通过`&lt;%@ taglib %&gt;指令完成。 - 标签属性的设置,例如`value`、`name`、`action`等,根据具体标签的语义来配置。 - 标签之间的嵌套,可以组合实现复杂功能。 - 配合OGNL...

    Struts2.1学习笔记

    - **用Struts2标签输出错误信息**:使用Struts2提供的标签(如`&lt;s:fielderror&gt;`)来显示校验失败的信息。 - **基于XML配置方式**:在`struts.xml`文件中定义校验规则。 - **对指定方法校验**:可以为特定的方法...

    Spring 2.0 开发参考手册

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    Spring中文帮助文档

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 ...

    java_学习资料

    - **nested标签库**:用于处理嵌套的数据结构,如`nested:iterate`。 **令牌** - **目的**:防止表单重复提交。 - **实现**:通过在表单中添加一个隐藏字段,并在提交表单前验证该字段的值是否有效。 **文件上传*...

    Spring API

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 ...

    J2EE课程总结

    - 通过`&lt;%@ page attribute="value" %&gt;`设置JSP页面的属性。 **5. 可重用的组件(JavaBean)** - JavaBean是一种遵循特定规范的Java类,通常用于封装数据或业务逻辑。 #### JSTL (JavaServer Pages Standard Tag ...

    spring chm文档

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 ...

Global site tag (gtag.js) - Google Analytics