2

formwithtext inputとを含むカスタムタグがありますsubmit。JSを使用してこれを検証したいtext inputので、カスタムタグの出力は次のようになります。

<script type="text/javascript">
    function validate(form) {
        var text = form.textInput;
        // validation code
    }
</script>

<form onsubmit='return validate(this);'>
    <input type='text' name='textInput'/>
    <input type='submit'/>
</form>

(このコードは簡略化されていることに注意してください!)

このタグをページで2回以上使用したい場合、問題が発生しますform。ページでもう一度印刷したいのですが、JS検証コードは使用しません。検証コードは、ページで一意である必要があります。どうすればそれをアーカイブできますか?私のカスタムタグは拡張しますjavax.servlet.jsp.tagext.TagSupport

4

3 に答える 3

3

私に最も適した解決策を見つけました。

クラスjavax.servlet.jsp.tagext.TagSupportには、ページ コンテキストを表す保護されたフィールドpageContextが含まれています。のコンテキスト属性に簡単にアクセスできますjavax.servlet.jsp.PageContext。そこで、カスタム タグに次のコードを挿入します。

public int doStartTag() throws JspException {
    if (pageContext.getAttribute("validated") == null) {
        // validation code writing
        pageContext.setAttribute("validated", true);
    }
    ...
}

ページのレンダリングごとに 1 回だけ条件に到達できる場合。

誰かに役立つことを願っています。

于 2013-01-30T15:13:30.867 に答える
2

その JavaScript 関数を .js ファイルに埋め込んで、そのファイルをインポートすることをお勧めします。それをしたくない場合は、定義されていない場合は、何らかの理由でその関数を動的に定義する必要があります。

if (typeof window.validateMyForm === 'undefined') {
    window.validateMyForm = function(form) {
        var text = form.textInput;
        // validation code
    }
}

ご想像のとおり、これはまだ定義されていない場合にのみ関数を定義する必要があります。

最初の答えは正しいですが、それはプログラマーがコード内のどこにカスタムタグが既に挿入されているかを知っている必要があることを意味し、それに応じてそのパラメーターを true または false に設定するかどうかを決定します。コードの変更については、常にページ全体を考えて、ページで使用されているすべてのタグを修正する必要があります。

于 2013-01-30T12:42:47.720 に答える
1

検証のオンとオフを切り替えるパラメーターを受け入れるようにカスタム タグを作成し、もちろん、パラメーターの値に応じて異なるコードを生成します。

于 2013-01-30T11:56:59.077 に答える