Spring <form:form> </form:form>的额外属性

时间:2011-08-02 13:20:54

标签: java jquery spring

对于jQuery Mobile,我需要标记:

<form action="..." method="get" data-ajax="false">
    <!-- Fields -->
</form>

由于我使用Spring,我真的很喜欢<form:form>为我做的事情,包括所有方便的绑定,生成字段等。

如何让<form:form>打印额外的属性?

2 个答案:

答案 0 :(得分:4)

<form:form>标记将允许任意属性。

<form:form commandName="blah" data-ajax="false">

工作得很好。

答案 1 :(得分:0)

您可以创建一个扩展标准Spring标记的自定义JSP标记。通过重写writeOptionalAttributes方法,您可以添加所需的其他属性。例如

public class FormTag
    extends org.springframework.web.servlet.tags.form.FormTag {

    private String dataAjax;

    /* (non-Javadoc)
     * @see org.springframework.web.servlet.tags.form.AbstractHtmlElementTag#writeOptionalAttributes(org.springframework.web.servlet.tags.form.TagWriter)
     */
    @Override
    protected void writeOptionalAttributes(final TagWriter tagWriter) throws JspException {
        super.writeOptionalAttributes(tagWriter);

        writeOptionalAttribute(tagWriter, "data-ajax", getDataAjax());
    }


    /**
     * Returns the value of dataAjax
     */
    public String getDataAjax() {
        return dataAjax;
    }


    /**
     * Sets the value of dataAjax
     */
    public void setDataAjax(String dataAjax) {
        this.dataAjax = dataAjax;
    }

}

然后,您需要使用自定义TLD,使新引擎可用于JSP引擎。我在这里只展示了它的片段,作为它的副本和放大器。从Spring原始版本粘贴,只添加了您的附加属性。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>custom-form</short-name>
    <uri>http://www.your.domain.com/tags/form</uri>
    <description>Custom Form Tag Library</description>
    <!-- <form:form/> tag -->
    <tag>
        <name>form</name>
        <tag-class>com.your.package.tag.spring.form.FormTag</tag-class>
        <body-content>JSP</body-content>
        <description>Renders an HTML 'form' tag and exposes a
            binding path to inner tags for binding.</description>
        <attribute>
            <name>id</name>
            <rtexprvalue>true</rtexprvalue>
            <description>HTML Standard Attribute</description>
        </attribute>
....
        <attribute>
            <name>dataAjax</name>
            <rtexprvalue>true</rtexprvalue>
            <description>jQuery data ajax attribute</description>
        </attribute>

将新的TLD文件放入您的Web应用程序的META-INF目录中,然后将其包含在您的JSP中正常

<%@ taglib prefix="custom-form" uri="http://www.your.domain.com/tags/form" %>

而不是使用

<form:form> 

使用

<custom-form:form dataAjax="false">