任何人都可以解释JSP自定义标记库和JSP 2标记文件背后的想法吗? 他们只是以不同的方式做同样的事情吗? 他们如何比较?它们的优点和缺点是什么,哪个更好? 我 3标签文件,但JSTL的首
他们只是以不同的方式做同样的事情吗?
他们如何比较?它们的优点和缺点是什么,哪个更好?
我< 3标签文件,但JSTL的首席开发人员如果他们真的这么说就会抽烟.您无法将所有标记库标记重新编写为标记文件标记,原因很重要:标记文件无法执行以下操作: 返回EVAL_BODY_INCLUDE; 换句话说,标记文件只有三个选项用于其正文内容: 空的:没有内在的内容,即. < someTag /> 无脚本:没有JSP内部内容,即. < someTag>< p> hello world< / p>< / someTag>是的,但不是< someTag>< p><%= helloWorld.toString()%>< / p>< / someTag>tagdependent:您可以拥有JSP内部内容,但不会这样处理;相反,你必须解析/渲染它,但你认为合适
但是使用旧样式标记库标记,您可以:
<体含量> JSP< /体含量>
(在tld文件中)然后“返回EVAL_BODY_INCLUDE;”来自你的“doStartTag”.如果这样做,所有JSP指令都将被解析,就像它们是页面的正常部分一样,并且您的标记只是用适当的内容包装它们.
就个人而言,我的经验法则是:尽可能使用标记文件,即.每当你不需要JSP指令在标签内部工作时,因为它们的清洁度要高一百万倍,非程序员更容易使用,所以不需要tld(如果你将它们保存在一个单独的命名空间中你的标签库标签).
但是如果您想在标记内部使用JSP内容,那么您唯一的选择就是标记库标记.希望有一天,JSP人员会发布一种在标记文件标记内进行JSP指令处理的方法,然后我们真的可以放弃旧的基于类的标记,但在此之前请不要尝试用标记文件做所有标记因为你很快就会被简化为为每一个逻辑部分制作自定义标签(因为这是在不使用JSP指令的情况下进行逻辑的唯一方法).