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的所有属性.但我真的不认为这是值得的. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
