最近在做项目时遇到一个问题,本来要实现功能的话很简单,用jsp的<%%>就可以实现,但是我认为这样的话前端页面就有了一段java代码,不是很好,然后我就想用OGNL表达式来实现。首先先描述一下我要实现的功能。
我的数据库中有一个产品表,对应有一个属性表,这里的属性表指的是产品的属性信息。比如有鞋子这种产品,那么我们购买时就会选择号码、颜色这些参数信息,我有看过有些网站对于这些信息是写死在页面的,即每个产品一个页面(因为每种产品可选择的参数不一样),但我想把它做成是可以后台管理的,不想把它固定在页面中,而且像他这样子的话要写很多页面。下面举个例子说明一下表结构:
eg: 铜版纸:(这是产品,下面的是对应的属性字段的值)
数量,2盒,5盒,10盒,20盒,50盒,100盒
覆膜,不覆膜,覆亚膜,覆光膜
面数颜色,单面四色,双面四色
切角,无,切圆角
烫工艺,无,烫金,烫银
每个字段的组成形式是属性+各种可选参数,全都用逗号分隔开,这样子的话我们从后台取出这个记录集合后在前台就需要把它展示出来,如下图这样
第一个逗号分隔出来的是属性,后面的是值。这里我们可以有两种方式来实现它。
一、使用jsp中的<%%>来实现,即先把取出来的结果(List集合)放到session中,然后前台在取出session做相应的处理。代码如下:
<body>
<%
List<Productproperty> pro = (List<Productproperty>)session.getAttribute("prolist");
String proper[];
for(Productproperty p :pro){
proper = p.getProper().split( ",");
%>
<%=proper[0] %>:
<%
for(int i= 1;i<proper.length;i++){
%>
<%=proper[i] %>
<% }%> <br />
<%}%>
上面通过split函数将每条记录根据“,”来分隔成数组,再展示出来,为什么<%=proper[0] %>这里要将第一个值取出来呢?这是为了方便下面后面的那些值弄成可选的(第一个是属性不需要),方便前端开发人员给这些值加样式,如上面的红色框框。 但是个人觉得这样不是一种好的实现方式,因为这样子前端页面多了挺多java代码,看上去就像用servlet做项目时的样子了,总之如果能不在前端页面写java代码是最好的了。所以当我这样子实现后觉得不是很好,一直在找另外能够实现功能又简洁的方式。大家应该可以想到,不用尖括号百分号的形式那肯定就用EL表达式或OGNL表达式来咯。没错,这里我们使用OGNL表达式可以使代码变得很简洁。下面是第二种实现方法:
代码如下:
<body>
<table>
<h4>所属产品:${type}</h4><br/>
<s:iterator value="propertylist" status="s"><!-- 取出List集合遍历-->
<tr>
<td>
<s:generator separator="," val="%{proper}"> <!--使用generator标签将每条记录根据逗号分割-->
<s:iterator status="properlist" > <!-- 遍历分割后的每条记录-->
<s:if test="#properlist.index==0">
<s:property />: <!--取出第一个属性-->
</s:if>
<s:else>
<a href=""><s:property/></a> <!--遍历显示其他值-->
</s:else>
</s:iterator>
</s:generator>
</td>
</tr>
</s:iterator>
</table>
</body>
附上运行后的结果截图:
两种方式都实现了功能,但是第二种的页面看起来更简洁,因为它没有过多的java代码,大家应该都会选择第二种方式实现吧。

本文介绍了如何在项目中避免在JSP页面上使用Java代码,转而采用OGNL表达式遍历List集合来实现动态显示产品属性信息。通过比较传统的使用JSP脚本和使用OGNL表达式的两种方法,展示了后者如何使代码更简洁,提高页面可读性。

223

被折叠的 条评论
为什么被折叠?



