1.简要的说明
我已经到网上搜过,这个主题的文章已经很多了。但是写的都不够好,至少多第一次接触这个主题的人来说写的不够好。因为他们没有注意到怎么样才是学习一个新事物,新技术的最好方法。最好的方法是从具体的入手。如果是知识,我们就从具体的事物开始,如果是技术,就从具体的操作开始,如果是理论,就从具体的问题开始。只有在积累了一定的具体的东西的时候,我们才能有效的在抽象层次上进行讨论。同样,研究也一样。所以我们在写文章的时候,最好的方式是show,把那些具体的东西展示给别人,而不是说教。
2.我的问题
我现在做的是一个JSF项目,其中有一个页面是用来显示一个订单中用户选择了的产品。在一个订单中可以有一个或者多个产品。为了突出意图,我们假设只要求显示产品的名字。代码如下:
<c:forEach items="#{orderBean.productionList}" var="production" >
<tr>
<td>
<h:commandLink value="#{production.name}"></h:commandLink>
</td>
</tr>
</c:forEach >
代码2-1
这是一个很简单的实现,这里用了一个连接来显示产品的名字,目的是让用户可以点击产品的名字来查看产品的详细信息。我们在后台backing bean里面,是用一个list来存储产品列表的。现在有一个问题:当用户在页面上点击一个产品的名字的时候,后台要知道用户点击的是list 中第几个。有两个实现办法,分别如代码2-2,和代码2-3。
<c:set var="num" value="0" />
<c:forEach items="#{orderBean.productionList}" var="production" >
<tr>
<td>
<h:commandLink value="#{production.name}">
<f:param name="itemId" value="#{num}" />
</h:commandLink>
</td>
</tr>
</c:forEach >
代码2-2
<c:forEach items="#{orderBean.productionList}" var="production" varStatus="row" >
<tr>
<td>
<h:commandLink value="#{production.name}">
<f:param name="itemId" value="#{row.index}" />
</h:commandLink>
</td>
</tr>
</c:forEach >
代码2-3