我已经编写了一个简单的taglib(称为Script),它接收主体的内容,将其包装在HTML <script>元素中,然后将其插入外部taglib(称为Body)的底部。这是为了自动化Zurb’s Foundation 4的初始化。这意味着该JSP:
Script
<script>
Body
<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 loader和$(document).foundation(); 在每个页面的底部,并且当包括我也通过JavaScript SDK使用Facebook Connect的事实时,有很多样板代码,这个taglib完全向我隐藏了)
.tld
TagInfo
<script></script>
onFoundationReady
$(document).foundation();
是的,没有。JSP规范中没有任何内容可以传达有关标签正文内容的任何相关信息,编辑者可以像处理页面其余部分或将其视为“放手”一样使用它。
变化可能给该污水处理厂进行 可能 让 另一个 Eclipse插件,以确定语法着色该区域,但是我真的不知道,如果一个特定的功能是值得付出的努力。