站内搜索:     
站点首页破釜学院编程开发JavaJSP → 基于JSF开发实战经验
正在加载相关信息.....
Web 站内搜索
基于JSF开发实战经验
】【打印】【加入收藏】【关闭收藏到新浪ViVi】【收藏到365KEY】 浏览字号:
日期:2006-05-22 人气: 出处:JR

使用DataModel意义何在呢?JSF中,我们可以把一个html页面上的table和一个DataModel绑定起来,这些数据会自动填充到table中,我们不必再自己去写循环,生成若干的

来生成一个table。在list.jsp中我们会看到如何使用DataModel。

放好数据之后,登陆成功的操作就完成了,返回一个login:ok,就可以重定向到list.jsp。如果用户登陆失败,那么会返回login:fail,重定向到error.jsp,它的内容就不叙说了。下面我们看看list.jsp里面有什么,下面是它的代码:

<body>
<f:view>
<h:form>
<h:dataTable id="users" value="#{UMDelegater.allUsers}" var="u" border="1" width="80%" >
<h:column>
<f:facet name="header">
<h:outputText value="id"/>
</f:facet>
<h:outputText value="#{u.id}"/>
</h:column>

<h:column>
<f:facet name="header">
<h:outputText value="帐号"/>
</f:facet>
<h:commandLink action="#{UMDelegater.edit}">
<h:outputText value="#{u.name}"/>
</h:commandLink>
</h:column>

<h:column>
<f:facet name="header">
<h:outputText value="密码"/>
</f:facet>
<h:outputText value="#{u.password}"/>
</h:column>

<h:column>
<f:facet name="header">
<h:outputText value="权限代码"/>
</f:facet>
<h:outputText value="#{u.power}"/>
</h:column>
</h:dataTable>
<p>
<h:commandLink action="#{UMDelegater.addNew}" value="增加用户" />
</p>
</h:form>
</f:view>
</body>

我们使用了一个h:dataTable标签,它是JSF独有的东西,它会被翻译为一个html的table,通过指定h:dataTable的value="#{UMDelegater.allUsers}"属性,它就与我们刚才生成的DataModel对象关联起来,数据会被自动填充。我们只需要声明dataTable中的每一列的表头,数据来自哪个字段就可以了,如下:
<h:column>
<f:facet name="header">
<h:outputText value="id"/>
</f:facet>
<h:outputText value="#{u.id}"/>
</h:column>

表格最后还有一个“增加用户”的按钮,它与UMDelegater.addNew绑定,它会把我们重定向到add.jsp。
需要注意的是,每个用户名都是个超链接,点击之后可以重定向到edit.jsp,这个页面可以修改用户资料。这是通过如下代码实现的:
<h:commandLink action="#{UMDelegater.edit}">
<h:outputText value="#{u.name}"/>
</h:commandLink>
可以看出,实际上系统调用了UMDelegater.edit方法,该方法的功能是根据页面传过来的用户id查询数据库,找到相关记录后返回一个User对象,然后重定向到edit.jsp,由于我们后面编写edit.jsp的时候会把form元素与User对象绑定,所以该User对象所含有的数据会自动显示到各个form元素上。

list.jsp的显示效果如下:

看到这里你也许会问,那么我如何来美化这个表格?实际上这正式JSF这类框架面临的最大问题,它大量的使用了标签库,目前流行的网页制作工具(如deamweaver)又没有提供足够的支持,所以只能依靠挖掘dataTable标签的各个属性,并且大量依赖css才能实现页面的美化。如果java世界能有一个强大的JSF IDE,能够提供vs.net一样的能力,那么JSF也许会更容易流行。

下面我们来看看edit.jsp的内容,如下:
<body>
<f:view>
<h:form>
<h:inputHidden id="id" value="#{UMDelegater.user.id}"/>
<h:panelGrid columns="3">
<h:outputLabel for="name" value="帐号"/>
<h:inputText id="name" value="#{UMDelegater.user.name}" required="true"/>
<h:message for="name"/>

<h:outputLabel for="power" value="权限"/>
<h:inputText id="power" value="#{UMDelegater.user.power}" required="true"/>
<h:message for="power"/>
</h:panelGrid>
<h:panelGroup>
<h:commandButton value="保存" action="#{UMDelegater.update}"/>
</h:panelGroup>
</h:form>
</f:view>
</body>
可以看出,edit.jsp并没有什么特别需要留意的,只是一个最简单的form与bean的绑定,“保存”按钮与UMDelegater.update方法绑定,它的功能是把修改后的form数据写入数据库,然后重新取一次数据,以免缓存做怪,看不到修改的效果。

Add.jsp也和edit.jsp很类似,它的内容如下:
<body>
<f:view>
<h:form>
<h:panelGrid columns="3">
<h:outputLabel for="name" value="帐号:" />
<h:inputText id="name" value="#{UMDelegater.user.name}" required="true"/>
<h:message for="name"/>

<h:outputLabel for="password" value="密码:"/>
<h:inputText id="password" value="#{UMDelegater.user.password}" required="true"/>
<h:message for="password"/>

<h:outputLabel for="power" value="权限"/>
<h:inputText id="power" value="#{UMDelegater.user.power}" required="true"/>
<h:message for="power"/>
</h:panelGrid>
<h:panelGroup>
<h:commandButton value="保存" action="#{UMDelegater.add}"/>
</h:panelGroup>
</h:form>
</f:view>
</body>

以上代码和edit.jsp几乎相同,请大家自行阅读理解,一口气写了8页,不想再?唆了。

由于最近时间很不充裕,所以JSF系列暂时打住,无限期搁置。我想这两篇文章已经能够说明很多问题,已经足够引导大家进入JSF的世界,自行研究解决其他细节。

>>>> 进入论坛交流 <<<<

相关文章:
暂时没有相关文章