【问题标题】:Java custom tag with JS带有 JS 的 Java 自定义标签
【发布时间】:2023-03-27 09:19:01
【问题描述】:

我有自定义标签,其中包含 formtext 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

【问题讨论】:

    标签: java javascript jsp servlets custom-tags


    【解决方案1】:

    我找到了最适合我的解决方案。

    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);
        }
        ...
    }
    

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

    希望它对某人有用。

    【讨论】:

      【解决方案2】:

      我建议您尝试在某个 .js 文件中嵌入该 JavaScript 函数并导入该文件。如果您不想这样做,出于某种原因,您应该尝试动态定义该函数(如果未定义):

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

      正如您猜想的那样,只有在尚未定义的情况下才应该定义函数。

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

      【讨论】:

      • 但是您的建议意味着,我应该在每次调用自定义标签时将此代码放在页面上)
      • 不,我的建议是用这个替换自定义组件中的 Javascript 代码。但是使用这段代码,你不应该在定义的 JavaScript 函数之间发生冲突。
      • 但是每次我调用我的标签时,它都会将JS代码放在.html页面!
      • 我写了这个作为替代,这将放置代码,但函数将只定义一次,与您的定义相反。起初我的建议是在 js 文件中定义函数,并在页面请求时导入该文件。
      • 我可以直接把这段代码写在页首,但是不好。自定义标签必须与应用程序分开,清楚吗?另外,是否可以从自定义标签访问页面对象? (如 js 'document' 对象)
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-20
        • 2014-01-03
        • 2014-12-26
        • 2021-12-01
        • 1970-01-01
        • 2014-09-11
        • 2019-08-07
        • 2011-11-15
        相关资源
        最近更新 更多