|
锁定老贴子 主题:代码擂台,特别有请buaawhl
该帖已经被评为精华帖
|
|
|---|---|
| 作者 | 正文 |
|
时间:2004-07-15
我也是一直在做Web应用,但是我的做法可以说极土,只用了jsp和java bean。没有用到任何的taglib,也没有用过任何现有的流行的框架。但是我想发起一个讨论,就是实现一些非常常见的Web应用,不同的方式,各自的代码是怎么样的,各位了解的人都把自己的实现方式贴出来,大家“比划比划”
1、学生成绩单 假设一个班级的学生,每人选修了数量不等的课程,在学期结束之后,需要打印一份班级的成绩单。大致的表格是这样的: [code:1] <table> <tr> <td>姓名</td> <td>平均成绩</td> <td>课程</td> <td>单科成绩</td> </tr> <tr> <td>张三</td> <td>80</td> <td>语文</td> <td>80</td> </tr> <tr> <td rowspan="2">李四</td> <td rowspan="2">85</td> <td>语文</td> <td>80</td> </tr> <tr> <td>数学</td> <td>90</td> </tr> </table> [/code:1] 2、服务项目列表 假设一家公司提供一系列的服务,这些服务被分为N个大类,每个大类又包含m个小类。我们需要把这个列表显示出来。大致的表格如下: [code:1] <table> <tr> <td colspan="4">A类服务</td> </tr> <tr> <td>A1服务</td> <td>A2服务</td> <td>A3服务</td> <td>A4服务</td> </tr> <tr> <td colspan="4">B类服务</td> </tr> <tr> <td>B1服务</td> <td>B2服务</td> <td>B3服务</td> <td>B4服务</td> </tr> <tr> <td>B5服务</td> <td>B6服务</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </table> [/code:1] 就先出这样个题吧,其他的典型应用,等我想到了再写出来。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
| 返回顶楼 | |
|
时间:2004-07-15
我的方式是 :
JSP+STRUTS+DAO+PO+MAP+VO+Hibernate! 虽然比楼上的构架多了五层.但是开发速度并不慢,现在我的瓶颈在STRUTS这一层,这一层开发效率低了.但总开发效率我觉得还是比得上 JSP+BEAN的 PO+MAP+VO+Hibernate 全部用工具生成, DAO层则半自动化. |
|
| 返回顶楼 | |
|
时间:2004-07-15
dhj1 写道 我的方式是 :
JSP+STRUTS+DAO+PO+MAP+VO+Hibernate! 虽然比楼上的构架多了五层.但是开发速度并不慢,现在我的瓶颈在STRUTS这一层,这一层开发效率低了.但总开发效率我觉得还是比得上 JSP+BEAN的 PO+MAP+VO+Hibernate 全部用工具生成, DAO层则半自动化. 把代码贴出来吧,咱们“用事实说话”:) |
|
| 返回顶楼 | |
|
时间:2004-07-15
庄表伟 写道 我也是一直在做Web应用,但是我的做法可以说极土,只用了jsp和java bean。没有用到任何的taglib,也没有用过任何现有的流行的框架。但是我想发起一个讨论,就是实现一些非常常见的Web应用,不同的方式,各自的代码是怎么样的,各位了解的人都把自己的实现方式贴出来,大家“比划比划”
1、学生成绩单 假设一个班级的学生,每人选修了数量不等的课程,在学期结束之后,需要打印一份班级的成绩单。大致的表格是这样的: [code:1] <table> <tr> <td>姓名</td> <td>平均成绩</td> <td>课程</td> <td>单科成绩</td> </tr> <tr> <td>张三</td> <td>80</td> <td>语文</td> <td>80</td> </tr> <tr> <td rowspan="2">李四</td> <td rowspan="2">85</td> <td>语文</td> <td>80</td> </tr> <tr> <td>数学</td> <td>90</td> </tr> </table> [/code:1] 2、服务项目列表 假设一家公司提供一系列的服务,这些服务被分为N个大类,每个大类又包含m个小类。我们需要把这个列表显示出来。大致的表格如下: [code:1] <table> <tr> <td colspan="4">A类服务</td> </tr> <tr> <td>A1服务</td> <td>A2服务</td> <td>A3服务</td> <td>A4服务</td> </tr> <tr> <td colspan="4">B类服务</td> </tr> <tr> <td>B1服务</td> <td>B2服务</td> <td>B3服务</td> <td>B4服务</td> </tr> <tr> <td>B5服务</td> <td>B6服务</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </table> [/code:1] 就先出这样个题吧,其他的典型应用,等我想到了再写出来。 感谢邀请。 我努力回答你的题目。不要见笑。因为我不太明白你的HTML代码里面的规则和规律。我试着用fastm解决这个问题。 第一个问题,没有看出来具体的规律和规则。试写如下: Fast Template is like. [code:1] <table> <tr> <td>姓名</td> <td>平均成绩</td> <td>课程</td> <td>单科成绩</td> </tr> <!-- BEGIN DYNAMIC: score --> <tr> <td>{name}</td> <td>{average_score}</td> <td>{subject}</td> <td>{score}</td> </tr> <!-- END DYNAMIC: score> </table> [/code:1] java code is like. [code:1] List scores = new ArrayList(); IValueSet score1 = new ValueSet(); score1.setVariable("{name}", "张三"); .... scores.add(score1); ... IValueSet valueSet = ValueSet(); valueSet.setDynamicVariable("score", scores); response.getWriter().write(template.toString(valueSet)); [/code:1] 第二个问题,大概看出来了规律和规则。应该是每4个服务换一次行。试写如下: fastm Template [code:1] <table> <!-- BEGIN DYNAMIC: service_category--> <tr> <td colspan="4">{service_category}</td> </tr> <!-- BEGIN DYNAMIC: tr --> <tr> <!-- BEGIN DYNAMIC: td --> <td>{service_name}</td> <!-- END DYNAMIC: td --> </tr> <!-- END DYNAMIC: tr --> <!-- END DYNAMIC: service_category --> </table> [/code:1] java code is like [code:1] List serviceCategories = new ArrayList(); (for each service data){ // 假设所有的数据都存在于service data list里面 IValueSet serviceCategory = new ValueSet(); serviceCategory.setVariable("{service_category}", service data.service category); List services = service data.services; int nServices = services.size(); int nLoop = nServices / 4; List trs = new ArrayList(); int count = 0; // service counter for(int j = 0; j < nLoop; j++){ IValueSet tr = new ValueSet(); List tds = new ArrayList(); for(int k = 0; k < 4; k++){ IValueSet td = new ValueSet(); td.setVariable("service_name", services[count]); tds.add(td); count++; } tr.setDynamicValueSet("td", tds); trs.add(tr); } serviceCategory.setDynamicValueSets("tr", trs); serviceCategories.add(serviceCategory); } IValueSet valueSet = new ValueSet(); valueSet.setDynamicValueSets("service_category", serviceCategories); response.getWriter().write(template.toString(valueSet)); [/code:1] |
|
| 返回顶楼 | |
|
时间:2004-07-16
to:buaawhl
你没有理解我的意思,第一个题,关键在于rowspan="n",这个n要等于该学生的选修科目数。 第二个题,关键在于子服务的数目不一定能被4整除,剩下的空位,要用&nbsp;补足。 更加根本的问题在于,你的模板,有没有对逻辑判断的支持,支持程度如何? |
|
| 返回顶楼 | |
|
时间:2004-07-16
用velocity试写如下,代码已经过测试.
[code:1]###### 测试数据 #################################### #set ( $score1 = ['语文','80'] ) #set ( $s1_scores = [$score1] ) #set ( $s1 = ['张三','80',$s1_scores] ) #set ( $score2 = ['数学','90'] ) #set ( $s2_scores = [$score1,$score2] ) #set ( $s2 = ['李四','85',$s2_scores] ) #set ( $students = [$s1,$s2] ) ################################################### <table border='1'> <tr> <td>姓名</td> <td>平均成绩</td> <td>课程</td> <td>单科成绩</td> </tr> #foreach ( $student in $students ) <tr> #set ( $rowspan="" ) #if ( $student.get(2).size() > 1 ) #set ( $rowspan = " rowspan='$student.get(2).size()'" ) #end <td$rowspan>$student.get(0)</td> <td$rowspan>$student.get(1)</td> #set ( $index = 0 ) #foreach ( $score in $student.get(2) ) <td>$score.get(0)</td> <td>$score.get(1)</td> </tr>#if ( $index < $student.get(2).size() - 1 ) <tr> #end #set ($index = $index + 1) #end #end </table>[/code:1] [code:1]###### 测试数据 #################################### #set ( $subservice_a = ['A1服务','A2服务','A3服务','A4服务'] ) #set ( $service_a = ['A类服务',$subservice_a] ) #set ( $subservice_b = ['B1服务','B2服务','B3服务','B4服务','B5服务','B6服务'] ) #set ( $service_b = ['B类服务',$subservice_b] ) #set ( $services = [$service_a, $service_b] ) ################################################### <table border="1"> #foreach ( $service in $services ) <tr> <td colspan="4">$service.get(0)</td> </tr> #set ( $rows = $service.get(0).size() % 4 ) #if ( $rows > 0 ) #set ( $rows = 1 ) #else #set ( $rows = 0 ) #end #set ( $rows = $rows + $service.get(1).size() / 4 ) #foreach ( $row in [1 .. $rows] ) <tr> #foreach ( $col in [1 .. 4 ] ) #set ( $index = ( $row - 1 ) * 4 + $col - 1 ) #if ( $index < $service.get(1).size() ) <td>$service.get(1).get($index)</td> #else <td>&</td> #end #end </tr> #end #end </table>[/code:1] |
|
| 返回顶楼 | |
|
时间:2004-07-16
谢谢,这样非常好!
|
|
| 返回顶楼 | |
|
时间:2004-07-16
引用 你没有理解我的意思,第一个题,关键在于rowspan="n",这个n要等于该学生的选修科目数。
[code:1]<table> <!-- BEGIN DYNAMIC: service_category--> <tr> <td colspan="4">{service_category}</td> </tr> <!-- BEGIN DYNAMIC: tr --> <tr> <!-- BEGIN DYNAMIC: td --> <td>{service_name}</td> <!-- END DYNAMIC: td --> </tr> <!-- END DYNAMIC: tr --> <!-- END DYNAMIC: service_category --> </table> [/code:1] 把4改成{number}就可以了,由後端代码返回number.第二个,算是针对html tag的逻辑,让buaawhl试试 |
|
| 返回顶楼 | |
|
时间:2004-07-16
这就更不对了,如果在数据部分,还要考虑到显示的逻辑,那不是乱了?
|
|
| 返回顶楼 | |
|
时间:2004-07-16
我用Velocity写的,代码如下。
第一题:[code:1] <table border=1> <tr> <td>姓名</td> <td>平均成绩</td> <td>课程</td> <td>单科成绩</td> </tr> #foreach ($student in $students) #set ($scoreSheets = $student.getScoreSheets()) #foreach ($sheet in $scoreSheets) <tr> #if ($index == 0) <td rowspan=$scoreSheets.size()>$student.getName()</td> <td rowspan=$scoreSheets.size()>$student.getAverageScore()</td> #end <td>$sheet.getCourse()</td> <td>$sheet.getScore()</td> </tr> #set ($index = $index + 1) #end #end </table> [/code:1] 第二题: [code:1] #foreach ($service in $services) <tr> <td colspan="4">$service.getName()</td> </tr> #set ($index = 0) #foreach ($subService in $service.getSubServices()) #if ($index % 4 == 0)<tr>#end <td>$subService.getName()</td> #if ($index % 4 == 3)</tr>#end #set ($index = $index + 1) #end #if ($index % 4 != 0) #foreach ($i in [$index % 4 .. 3]) <td>& nbsp;</td> #end </tr> #end #end [/code:1] 分析:因为HTML中固有的"rowspan"和"colspan"非结构化的原因,有时候不得不用一些较复杂逻辑语句来控制页面显示,减少了页面的可读性 |
|
| 返回顶楼 | |











