使用JS的Java自定义标记

时间:2013-01-30 10:05:45

标签: java javascript jsp servlets custom-tags

我的自定义代码包含form text inputsubmit。我想使用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>

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

当我想在页面上使用此标记两次或更多次时出现我的问题 - 我想再次在页面上打印form,而不是JS验证代码!验证代码在页面上必须是唯一的。我该如何存档?我的自定义标记扩展为javax.servlet.jsp.tagext.TagSupport

3 个答案:

答案 0 :(得分: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 :(得分:2)

我建议你尝试将JavaScript函数嵌入到某些.js文件中导入该文件。如果您不想这样做,出于某种原因,如果没有定义,您应该尝试动态定义该函数:

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

如你所想,只有在尚未定义函数时才应该定义函数。

第一个答案是正确的,但这意味着程序员必须知道代码中的哪些位置已经插入了自定义标记,并根据这一点确定是将该参数设置为true还是false。关于代码更改,您必须始终考虑整页并修改页面上所有使用的标记。

答案 2 :(得分:1)

使自定义标记接受一个打开或关闭验证的参数,当然它会根据参数的值生成不同的代码。