我编写了一个简单的 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 完全隐藏了很多样板代码)