0

HTML 5 タグを使用して、のようにスプリング フォーム タグを作成することは可能です <form:canvas path="" id="" title=""/><form:input path="" id="" title=""/>。spring-form.tld のコピーに追加する必要がありますか?

これを作成する方法について混乱しています。誰かがこれを説明できます。フォーム要素へのスプリングバインディングの恩恵を受けることができるように、これを行いたいと思います。

4

1 に答える 1

1

春のカスタム タグについては、Spring タグ ライブラリを拡張するカスタム タグ ライブラリの作成を参照 してください。

1 RequestContextAwareTag クラスの .doStartTag() メソッドが最初に呼び出されます。

2 2番目に AbstractFormTag クラスの .doStartTagInternal() メソッドが呼び出されます。

3 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 に答える