0

我编写了一个简单的 taglib(称为Script),它获取它的主体内容,将其包装在一个 HTML<script>元素中,并将其插入到外部 taglib(称为Body)的底部。这是为了自动化Zurb 的 Foundation 4的初始化。这意味着这个 JSP:

<r:page>
  <r:head title='Test Site'/>
  <r:body>
    <div id='thing'></div>
    <r:script>
      $(function() {
        $('#thing').html('DOM is ready');
      });
    </r:script>
  </r:body>
</r:page>

呈现为以下 HTML:

<!DOCTYPE html>
<!--[if IE 8]><html class='no-js lt-ie9' lang='en'><![endif]-->
<!--[if gt IE 8]><!--><html class='no-js' lang='en'><!--<![endif]-->
  <head>
    <meta http-equiv='content-type' content='text/html;charset=UTF-8' />
    <title>Test Site</title>
    <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1'>
    <link rel='stylesheet' href='/css/foundation.min.css'>
    <script src='/js/vendor/custom.modernizr.js'></script>
    <!--[if lt IE 9]><script src='http://html5shiv.googlecode.com/svn/trunk/html5.js'></script><![endif]-->
  </head>
  <body>
    <div id='thing'></div>
    <script>
      document.write('<script src=/js/vendor/' + ('__proto__' in {} ? 'zepto' : 'jquery') + '.js><\/script>')
    </script>
    <script src='/js/foundation.min.js'></script>
    <script>
      $(document).foundation();
      //The contents of the <r:script> from the JSP
      $(function() {
        $('#thing').html('DOM is ready');
      });
    </script>
  </body>
</html>

现在这种方法的缺点是 Eclipse WTP JSP 编辑器将脚本 taglib 的正文内容视为更多的 HTML,因此我失去了 JavaScript 语法突出显示。有什么方法(可能是通过向.tld文件添加信息或创建一个TagInfo类来告诉 JSP 编辑器正文是要读取 JavaScript 的?或者是<script></script>手动添加元素的唯一方法(为了清楚起见重命名)自定义 taglib 之类的东西onFoundationReady)。另外,如果仍然有可能说服比我更聪明的人相信这些额外的努力是值得的,另一种选择是包含样板 Zepto/jQuery 加载器和$(document).foundation();在每个页面的底部,当包括我也通过 JavaScript SDK 使用 Facebook Connect 的事实时,这个 taglib 完全隐藏了很多样板代码)

4

1 回答 1

1

是和不是。JSP 规范中没有任何内容可以传达关于标签正文内容的任何相关信息,编辑器可以使用这些信息,除了像处理页面的其余部分一样处理它或将其视为“放手”。

可以对 WTP 进行更改,以允许另一个Eclipse插件确定该区域的语法着色,但我真的不知道该特定功能是否值得付出努力。

于 2013-10-15T22:49:22.127 回答