Bha*_*ani 6 java spring jsp spring-mvc taglib
我想创建一个自定义标记库,它应该扩展现有的Spring MVC 3.0标记库.我想这样做是因为我希望我的JSP代码独立于任何框架.
这意味着,如果我想从Spring更改为Struts,那么我就不需要在JSP页面中进行任何更改.我只是更改我的自定义标记库,它将扩展Struts标记库,所有工作正常.
sla*_*r_b 16
您无法扩展整个库,但您可以扩展库中的所有标记并为它们创建新的描述符,然后使用您自己的标记而不是Spring标记.
例如,转到名为的文件spring-form.tld
.您将看到标记描述符,其中包含属性描述和标记类名称.
因此,要拥有自己的标记库,您必须创建:
只需在Google上搜索"jsp自定义标记"即可.或者看一下JSP自定义标签.
例如,从Struts和Spring中为[form]标记取两个类:
你将不得不创建类似的东西:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我只发布了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>
Run Code Online (Sandbox Code Playgroud)
您还必须将.tld文件放入JAR文件的META-INF目录中.具有此taglibrary的JAR文件必须只是WAR文件中包含的JAR 文件,否则将无法检测到taglibraries.
然后将您的taglib包含在JSP文件中:
<%@ taglib prefix="html" uri="http://test.com/test.tld" %>
Run Code Online (Sandbox Code Playgroud)
并使用它:
<html:form action="asd" focus="1">
<div><input type="text"></div>
<div><input type="submit"></div>
</html:form>
Run Code Online (Sandbox Code Playgroud)
如果要在Struts之间切换,还必须为Struts创建这样的库.
在执行此操作时,您唯一需要记住的是Spring和Struts有一些不同的标记定义,因此Struts具有'焦点'而Spring不具有.我认为可能会有更多的差异.
如果你真的想从一个转换到另一个,你必须让你的标签拥有Spring和Struts的所有属性.但我真的不认为这是值得的.
归档时间: |
|
查看次数: |
21884 次 |
最近记录: |