2

我有自定义标签,其中包含formwithtext inputsubmit。我想text input使用 JS 来验证这一点,所以我的自定义标签输出应该如下所示:

<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>

(注意,此代码已简化!)

当我想在页面上使用此标签两次或更多次时出现我的问题 - 我想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);
    }
    ...
}

如果每页渲染只能达到一次条件。

希望它对某人有用。

于 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 回答