java – 创建一个扩展Spring标记库的自定义标记库
我想创建一个自定义标记库,它应该扩展现有的
Spring MVC 3.0标记库.我想这样做是因为我希望我的
JSP代码独立于任何框架.
这意味着,如果我想从Spring更改为Struts,那么我就不需要在JSP页面中更改任何内容.我只是更改我的自定义标记库,它将扩展Struts标记库,所有工作正常. 解决方法
您无法扩展整个库,但您可以扩展库中的所有标记并为它们创建新的描述符,然后使用您自己的标记而不是
Spring标记.
例如,转到名为spring-form.tld的文件.您将看到标记描述符,其中包含属性描述和标记类名称. 因此,要拥有自己的标记库,您必须创建: > my-lib.tld(指定[库的uri]) 只需在Google上搜索“jsp自定义标记”即可.或者看看JSP custom tags. 例如,从Struts和Spring为[form]标签取两个类: > org.apache.struts.taglib.html.FormTag 你将不得不创建类似的东西: package org.my.example.tags; import javax.servlet.jsp.JspException; import org.springframework.web.servlet.tags.form.FormTag; import org.springframework.web.servlet.tags.form.TagWriter; /** */ public class SpringFormTag extends FormTag { private static final String FOCUS_ATTRIBUTE = "focus"; private String focus; public void setFocus(String focus) { this.focus = focus; } public String getFocus() { return focus; } @Override protected void writeDefaultAttributes(TagWriter tagWriter) throws JspException { writeOptionalAttribute(tagWriter,FOCUS_ATTRIBUTE,getFocus()); super.writeDefaultAttributes(tagWriter); } } 我只发布了spring的表单标签的代码. 文件my-lib.tld: <?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>My tag library</description> <tlib-version>3.0</tlib-version> <short-name>html</short-name> <uri>http://test.com/test.tld</uri> <tag> <name>form</name> <tag-class>org.my.example.tags.SpringFormTag</tag-class> <body-content>JSP</body-content> <attribute> <name>action</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>acceptCharset</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>dir</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>disabled</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </attribute> <attribute> <name>enctype</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>focus</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>focusIndex</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>lang</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>method</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>onreset</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>onsubmit</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>readonly</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </attribute> <attribute> <name>scriptLanguage</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </attribute> <attribute> <name>style</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>styleClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>styleId</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>target</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> 您还必须将.tld文件放入JAR文件的META-INF目录中.具有此taglibrary的JAR文件必须只是包含在WAR文件中的JAR文件,否则将无法检测到taglibraries. 然后将您的taglib包含在JSP文件中: <%@ taglib prefix="html" uri="http://test.com/test.tld" %> 并使用它: <html:form action="asd" focus="1"> <div><input type="text"></div> <div><input type="submit"></div> </html:form> 如果要在Struts之间切换,还必须为Struts创建这样的库. 在执行此操作时,您唯一需要记住的是Spring和Struts有一些不同的标记定义,因此Struts具有’焦点’而Spring不具有.我认为可能会有更多的差异. 如果你真的想从一个转换到另一个,你必须让你的标签拥有Spring和Struts的所有属性.但我真的不认为这是值得的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |