2015-04-03 19 views
0

我正在一个遗留项目,我已经看到下面的一段代码。 我知道在scriptlet中使用脚本是一种不好的做法。关于这一点,我几乎没有想到混淆。Scriptlet内的脚本 - 不好的做法如何避免

  1. 我相信这是小脚本的网页加载之前执行,因此,如果跌破,如果条件为真,则ShowBookReference()函数调用是一个HTML页面的一部分,但我的问题是,当呈现页面时应该调用此函数是否发生?

<% if (refLinkTerm != null) { %> 
 
      <script Language="javascript"> 
 
      ShowBookReference('<%=sub2ndNavMenu%>', '<%=refLinkTerm%>', <%=String.valueOf(searchType)%>, <%=String.valueOf(codeType)%>) 
 
      </script> 
 
    <%}%>

  • 如何避免这种做法?
  • 请分享您的想法。

    回答

    2

    使用MVC框架,如Spring MVC。在这些框架中,您可以使用要显示的页面的值填充Java对象(或对象图),然后该页面只是使用这些值填充占位符。

    2

    就JSP而言,它通常使用scriptlets为JS赋值。

    但是,正如你所提到的,它在页面加载之前运行,因此在window.onload上运行该函数是很好的。

    <script type="text/javascript"> 
         window.onload = function() { 
          ShowBookReference('<%=sub2ndNavMenu%>', '<%=refLinkTerm%>', <%=String.valueOf(searchType)%>, <%=String.valueOf(codeType)%>) 
         } 
    </script> 
    

    如果你指的内部ShowBookReference功能一些DOM元素,它可能无法使用等页面加载运行。

    否则,您可以使用像JSF这样的UI框架,它提供了标签,可以轻松地将Java值绑定到UI。

    +0

    如果某些方法xyz()已经在body onload()中提及,您的方法是否同时调用xyz()和ShowBookReference()? – 2015-04-03 03:36:25

    +0

    不,它不会。在这种情况下,你必须使用'addEventListener'绑定事件,它将触发所有的事件处理程序。就基于属性的事件处理程序而言,它们会被稍后的事件处理程序覆盖。因此,请使用attachEvent/addEventListener – mohamedrias 2015-04-03 03:38:15

    +0

    请勿使用JSF。它的核心架构存在许多致命缺陷,并被更好的方法所取代。 – chrylis 2015-04-03 12:30:36