JSP让我很受打击
来源:互联网 发布:淘宝助理5.8.3.0 编辑:程序博客网 时间:2024/04/29 21:38
从上个星期开始,就在研究怎么在JSP中展现一个TreeTable。首先是在数据来源上纠结了很久,花了两天才解决了怎么样采集到想要的数据。
将需求简化一点,其实本来已经很简单了:在数据库中有一各表结构很简单。
id int
subid int
有这样的一个表,我希望得到一份这样的数据。给定一个id,然后我希望找到同这个id相关的所有subId。也就是如果有下面这样一份数据:
1------|
2-----|
| 4-----|
| 5
3------|
6-----|
7
但是刚开始时候,我知道用存储过程使用递归将数据从数据库取出来。但是取出来以后该怎么处理,我想了很久。应为需要用到层次关系,所以查出来的数据就是像表1这样表示的。现在需要把它用对象表示出来。存数据的数据结构很简单,就是一个类,然后里面一个列表,存有跟自己有关系的subid.第一天的时候就在纠结这个问题,没有答案。
到今天,忽然开窍了。既然用递归可以取出原始数据,那我同样的用递归来处理就好了啊。这样我很快的拿到了我想要的数据结构。接着就是在页面展示了。我用的是Servlet + JSP的模式,在JSP中有Java代码。按理说,在页面上页用递归的方式来处理数据就好了。但是,JSP的知识都忘的差不多了。
第一尝试,使用了 <% public void methodName(xxx) %>的方式,直接编译不过。想了一下,觉得JSP会被编译成Java文件的,直接写个函数应该是不成问题的啊。不过Eclipse报的错没有说明为什么,只好继续尝试了。
第二次尝试,写了一个内部类来处理。但是同样的是直接报错,说是不能引用非 final的 变量。好,不行咱再试。
第三次尝试,既然内部类不行,我直接写了一个Java类来处理。我知道JSP有个内部对象out, 而且Jsp编译成Java文件以后就是用它来输出Html的。但是这里有一个问题, JSP的out是 JspWriter类型的,我没办法直接import. 所以,我第一次就用了PrintWriter,从 reponse.getWriter()获得Writer。然后再页面使用该类来处理数据,结果数据是显示出来了。但是是直接给我打到了页面上,还是不行。我算是百折不饶啊,继续试。
第四次尝试,这个时候我想不用递归行不行,尝试用循环。但是我仔细想想就放弃了,因为我根本不知道会有多少层。
第五次尝试,这个时候还闭门造车就不行了。所以我到网上去搜了搜,这一搜还真的找到了解决方案。因为我看到了有人在JSP中使用了函数,用的是 <%! public void methodName(xxx) %>的格式。这次声明函数就没错了,接着就要解决怎样将html标签打出来了。还是要用到out对象,这次我到编译好的JSP文件中看了看,发现它是通过 pageContext.getOut()的方式来获得out对象的,用同一个out打出来的东西应该是显示在一起的。但是我自己写的时候只能用PrintWriter,不能用JspWriter。这个时候我想到了java I/O用的最常见的模式:装饰模式。既然我能得到JspWriter的对象,我直接用它来构造PringWriter不就可以了吗。到这里问题基本解决了。整整花了我快三天时间,真是太悲剧了。
现在要是问我 <%%> 和 <%! %>我也是不知道,网上也没说。看来明天要自己查了,一定要搞明白。
- JSP让我很受打击
- 我受打击了
- 我受打击了
- 我真的受打击啦
- 第一次面试很受打击
- 受打击
- 让我崩溃的jsp
- 受打击了
- 受打击了!
- 受打击了
- 今天受打击了。
- layoutSubviews 受打击了
- 受打击了
- 让我很郁闷
- 工作受打击该怎么办?
- 加多少房间受打击
- 士大夫受打击掉几点干活
- 他让我很失望
- Unreal3游戏引擎UObject源码阅读分析
- iText生成PDF
- snprintf函数说明
- 呜呜、、编码好难呀
- 红黑树头文件C语言
- JSP让我很受打击
- 红黑树实现文件C语言
- 数据库设计的几条最佳实践
- 三维模型的网格细化
- JAVA静态块和非静态块的区别
- 单链表基本操作总结
- STL源码剖析之六:算法
- 函数调用入栈基本步骤(感觉和进程的栈帧结构一块看会比较容易理解)
- 用指针(比较三个字符串的大小)