如何调试JSTL?
我正在使用SpringSource Tool Suite(使用Roo)并取得了一些成功。 令我困扰的是,我不知道如何调试标签库的东西。
我可能会添加断点但它永远不会停留在它们上面。
我正在寻找的是在上下文中转储所有当前变量。
到目前为止,我做了类似的事情:
可悲的是,这很难阅读,也不是很简单。
我该怎么做才能改善这个?
抱歉,您无法将调试点放到包含标记的文件中。 在这种情况下,标记库定义采用标记的forms。 因此,您只需获得validation支持,而不是调试。
一个例外是Java Server Pages(JSP)文件,它将在运行时转换为servlet(程序代码)。
只有具有已定义执行顺序的脚本和代码才能进行调试。
解决此问题的最佳方法是在获得有关XML或相关标记语言的知识后仔细阅读文档并逐步实现标记。
这总是很棘手,因为这个问题的未来访客增加了我的2美分
如果你在Eclipse上的jsp上放一个断点就行了
您可以编写一个自定义标记来访问spring上下文并转储当前变量。 您还可以编写转储Application,Session,Page和Request范围内容的自定义标记(或标记)。
看看Java EE 6 API 。 查找SimpleTag以开始实现标记。 以下是Java EE 5教程中自定义标记部分的链接。
示例(转储请求范围):
MyTag类扩展了TagSupport { public int doEndTag() { 枚举attributeNames; 对象attributeValue; String currentName; int nameIndex; 迭代器nameIterator; JspWriter pageOut = pageContext.getOut(); ServletRequest request = pageContext.getRequest(); attributeNames = request.getAttributeNames(); nameIterator = parameterNames.iterator(); while(nameIterator.hasNext()) { currentName = nameIterator.next(); attributeValue = request.getAttributeValue(currentName); pageOut.print(“名称:”); pageOut.print(currentName); pageOut.print(“ span> span> 值:”); pageOut.print( “<跨度>”); pageOut.print(attributeValue.toString()); pageOut.print( “跨度>”); pageOut.print( “跨度> DIV>”); } } }
您可以使用pagecontext.getAttributeNamesInScope(int scope)来获取每个范围的属性。 范围(在PageContext类中定义)是APPLICATION_SCOPE,PAGE_SCOPE,REQUEST_SCOPE和SESSION_SCOPE。
我像DwB所说的那样,现在我可以提供有关如何在jstl中转储变量的更多细节。
首先创建一个自定义标签,这里是代码。
public class JSTLElDumpTag extends TagSupport { @Override public int doStartTag() throws JspException { JspWriter out=pageContext.getOut(); try{ //out request attribute ServletRequest request=pageContext.getRequest(); Enumeration it=request.getAttributeNames(); out.print("request scope
"); while(it.hasMoreElements()){ Object next=it.nextElement(); out.print(""+next+":"+request.getAttribute(next.toString())+",value type:"+request.getAttribute(next.toString()).getClass().getName()+""); } out.print(""); return super.doStartTag(); } catch (IOException e){ throw new JspException("Io exception occurred "); } } }
在上面的代码中我转储了所有请求变量,包括它的名称,值和类型。 我认为在处理数字时类型非常重要。
接下来我们需要配置我们的tld文件。
1.0 date eldump JSTLElDumpTag JSP
在web.xml中配置此tld文件
/tags /WEB-INF/datetag.tld
tld文件名是datetag.tld
现在我们可以在我们的jsp文件中使用了
<%@taglib prefix="bw" uri="/tags" %>
把上面放在你的jsp文件的头部,并在你使用的jsp文件的末尾
然后转储你的变量。
我应该声明的是,在某些情况下,我们需要将变量转储到jsp文件中由jstl标记cset声明,你应该在设置变量时添加属性scope = request,或者上面的方式不会转储这些变量。
我希望这会对您有所帮助,如果您在我的post中发现一些错误,您的通知将真诚地感谢。