0

是否可以使用 HTML 5 标签并创建一个 <form:canvas path="" id="" title=""/><form:input path="" id="" title=""/>. 如何实现这一点,我是否需要添加到我的 spring-form.tld 副本中?

我对如何创建它感到困惑,有人可以解释一下。我想这样做,这样我就可以从弹簧绑定到表单元素中受益。

4

1 回答 1

1

对于 spring 自定义标签,请参阅 创建扩展 Spring 标签库的自定义标签库 根据您的问题,以下是 spring FormTag 工作的顺序

1首先调用RequestContextAwareTag类的.doStartTag()方法。

2 AbstractFormTag 类的 .doStartTagInternal() 方法在第二个被调用。

3 FormTag的.writeTagContent(TagWriter tagwriter)方法在第三个被调用。

现在让我们按照这个调用顺序扩展 FormTag 类。1 和 2 的调用顺序相同。但是在 3 中,当 CustomFormTag 扩展 FormTag 时,这次将调用 CustomFormTag 的 writeTagContent。

所以我们的代码将是

public class CustomFormTag extends FormTag
{

    public CustomFormTag ()
    {
    }

    protected int writeTagContent(TagWriter tagWriter)
        throws JspException
    {
        int result = super.writeTagContent(tagWriter);  

        writeOptionalAttribute(tagWriter, "testattribute", getTestAttribute());


        return result;
    }
//getter and setter for testattribute.

调用代码 super.writeTagContent(tagWriter);
它调用 FormTag 类的 writeTagContent 方法。

protected int writeTagContent(TagWriter tagWriter)
        throws JspException
    {
        this.tagWriter = tagWriter;
        tagWriter.startTag("form");  // form tag is here so we can not change it with canvas
        writeDefaultAttributes(tagWriter);
        tagWriter.writeAttribute("action", resolveAction());
        writeOptionalAttribute(tagWriter, "method", getMethod());
        writeOptionalAttribute(tagWriter, "target", getTarget());
        writeOptionalAttribute(tagWriter, "enctype", getEnctype());
        writeOptionalAttribute(tagWriter, "accept-charset", getAcceptCharset());
        writeOptionalAttribute(tagWriter, "onsubmit", getOnsubmit());
        writeOptionalAttribute(tagWriter, "onreset", getOnreset());
        writeOptionalAttribute(tagWriter, "autocomplete", getAutocomplete());
        tagWriter.forceBlock();
        String modelAttribute = resolveModelAttribute();
        pageContext.setAttribute(MODEL_ATTRIBUTE_VARIABLE_NAME, modelAttribute, 2);
        pageContext.setAttribute(COMMAND_NAME_VARIABLE_NAME, modelAttribute, 2);
        previousNestedPath = (String)pageContext.getAttribute("nestedPath", 2);
        pageContext.setAttribute("nestedPath", modelAttribute + ".", 2);
        return 1;
    }

因此,您不能在扩展 spring 标签库的 spring mvc 中将表单更改为画布。.您可以编写不扩展spring标签库的自定义标签

于 2013-04-12T11:45:14.457 回答