是否可以使用 HTML 5 标签并创建一个
<form:canvas path="" id="" title=""/>
像<form:input path="" id="" title=""/>
. 如何实现这一点,我是否需要添加到我的 spring-form.tld 副本中?
我对如何创建它感到困惑,有人可以解释一下。我想这样做,这样我就可以从弹簧绑定到表单元素中受益。
是否可以使用 HTML 5 标签并创建一个
<form:canvas path="" id="" title=""/>
像<form:input path="" id="" title=""/>
. 如何实现这一点,我是否需要添加到我的 spring-form.tld 副本中?
我对如何创建它感到困惑,有人可以解释一下。我想这样做,这样我就可以从弹簧绑定到表单元素中受益。
对于 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标签库的自定义标签