﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-一切从实用出发!-随笔分类-Java Server Faces</title><link>http://www.blogjava.net/fool/category/12774.html</link><description>坚持就是胜利!</description><language>zh-cn</language><lastBuildDate>Mon, 08 Oct 2007 21:32:09 GMT</lastBuildDate><pubDate>Mon, 08 Oct 2007 21:32:09 GMT</pubDate><ttl>60</ttl><item><title>jsf1.2 自定义日历组件</title><link>http://www.blogjava.net/fool/archive/2007/10/08/150988.html</link><dc:creator>傻  瓜</dc:creator><author>傻  瓜</author><pubDate>Mon, 08 Oct 2007 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/fool/archive/2007/10/08/150988.html</guid><wfw:comment>http://www.blogjava.net/fool/comments/150988.html</wfw:comment><comments>http://www.blogjava.net/fool/archive/2007/10/08/150988.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fool/comments/commentRss/150988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fool/services/trackbacks/150988.html</trackback:ping><description><![CDATA[开发自己的jsf组件并不是一件容易的事情，因为jsf组件对于应用程序员来说还是过于复杂跟耗费时间了。开发不依赖于具体实现jsf-api的第三方jar包的组件就更不容易了，要做的工作比较的多.本例参照了一个jsf1.1组件的开源跟jsf1.2-RI的源码,理论上应该是可以通用的组件,并且是一个实用的基于jsf1.2的日历组件。.因为源码太长，不方便在这里一一贴出来，只好简略介绍一下各个类的功能，及一些配置了，感兴趣的朋友可以从附件里下载.如果要用在别的地方可以自己打个jar包.jsf自定义组件至少需要三个类:<br />
&nbsp; 处理标签属性的类com.sun.faces.metal.MetalCalendarTag,维护状态处理输入的类com.sun.faces.metal.MetalCalendar和一个外部呈现器类com.sun.faces.metal.MetalCalendarRenderer(其中addRequiredMessage(FacesContext context, MetalCalendar cal)之类的方法很有趣，定义了&lt;h:message&gt; 标签的一些类容),这里着重说明一下标签处理类，因为jsf1.2跟jsf1.1的实现有些不一样，原因是jsf1.2使用了统一的EL语言。<br />
Jsf1.2中所有的自定义标签的属性都是一个javax.el.ValueExpression的实例，所有的方法绑定都是一个javax.el.MethodExpression的实例，不再需要去创建一个ValueBinding和MethodBiding.关于这一点可以参考网上的jsf1.2新特性的文档。com.sun.faces.metal.HtmlBasicRenderer类很干脆，直接从jsf1.2-RI中copy过来略加改动，是com.sun.faces.metal.MetalCalendarRenderer的超类。<br />
com.sun.faces.metal.metl. StaticResourcePhaseListener类一个事件监听类，它的作用是把一些js,css,图像文件等输出到客户端，以定制组件的外观，而不是在呈现器类中通过writerAttribute(&#8220;img&#8221;,&#8221;tt.gif&#8221;,&#8221;img&#8221;)之类的通过图象的URL去定位这个文件。这样的目的只有一个，就是文件打成jar包，以便供第三方使用。<br />
&nbsp;com.sun.faces.metal.util.FacesMessage类很也很干脆从javax.faces.application.FacesMessage类继承而来，实际上只是为了改变下一FACES_MESSAGES 属性，使之看起来像这样public static final String FACES_MESSAGES = "com.sun.faces.metal.util.Messages"; com.sun.faces.metal.util包中有两个Messages.properties属性文件，一个是针对中文的.<br />
com.sun.faces.metal.util.FacesMessageFactory类也只是从jsf1.2-ri包中复制过来的.这样我们就可以完全不依赖jsf-api的实现而定义了自己的message属性.<br />
剩下的就是一些辅助类了，也还算容易看的懂.<br />
原本应该很庸长的一些叙述在这里极度浓缩了，简直就是没法理解的，好在如果有自定义jsf组件的基础，源码也应该还看得懂.<a title="源码下载" href="http://www.blogjava.net/Files/fool/jsf1.2日历组件.rar">源码下载</a>
<img src ="http://www.blogjava.net/fool/aggbug/150988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fool/" target="_blank">傻  瓜</a> 2007-10-08 10:58 <a href="http://www.blogjava.net/fool/archive/2007/10/08/150988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF 在弹出对话框里修改多行记录</title><link>http://www.blogjava.net/fool/archive/2006/07/31/60963.html</link><dc:creator>傻  瓜</dc:creator><author>傻  瓜</author><pubDate>Mon, 31 Jul 2006 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/fool/archive/2006/07/31/60963.html</guid><wfw:comment>http://www.blogjava.net/fool/comments/60963.html</wfw:comment><comments>http://www.blogjava.net/fool/archive/2006/07/31/60963.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fool/comments/commentRss/60963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fool/services/trackbacks/60963.html</trackback:ping><description><![CDATA[
		<p>  在javaserver faces里做弹出对话框并不是一件容易的事情,尤其是在弹出对话框里做修改记录的操作,感觉还是蛮麻烦的. 这里主要用到了两个javascript小技巧,window.open("","popup","height=480,width=320,toolbar=no,menubar=no,scrollbars=no");打开一个空白网页的窗口,然后动态设置修改按钮提交时的target属性.另一个小技巧是 setInterval('opener.window.location.href=opener.window.location.href;window.close();',20);在编辑页面提交表单时做这个</p>
		<p>
				<br />显示数据的文件show.jsp<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html; charset=GB2312"%&gt;<br />&lt;<a href="mailto:%@taglib">%@taglib</a> uri="<a href="http://java.sun.com/jsf/core">http://java.sun.com/jsf/core</a>" prefix="f"%&gt;<br />&lt;<a href="mailto:%@taglib">%@taglib</a> uri="<a href="http://java.sun.com/jsf/html">http://java.sun.com/jsf/html</a>" prefix="h"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;script language="javascript" type=""&gt;<br /> pressed="fail";<br />function setPress(newValue){<br />   pressed=newValue;<br />   }<br />function confirmSubmit(){</p>
		<p>  if(pressed="editor"){<br />     popup = window.open("","popup","height=480,width=320,toolbar=no,menubar=no,scrollbars=no");<br />     popup.openerFormId=document.forms["fors"].id;<br />     popup.focus();<br />     document.forms["fors"].target="popup";</p>
		<p>  }<br />}</p>
		<p>&lt;/script&gt;<br />&lt;script  language="javascript" type=""&gt;<br /> function SetCheckedStatus()<br />{<br />    var oTable=document.all['fors:data'];<br /> var oChkAll=document.all['fors:selectall']</p>
		<p> if(oTable != null &amp;&amp; oChkAll != null)<br /> {<br />  for(j=1;j&lt;oTable.rows.length;j++)<br />  {<br />   oTable.rows(j).cells(0).children.item(0).checked=oChkAll.checked;<br />  }<br /> }<br />}</p>
		<p>&lt;/script&gt;<br />&lt;link href="css/styles3.css" rel="stylesheet" type="text/css"/&gt;<br />&lt;title&gt;show book&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body bgcolor="#ffffff"&gt;<br />&lt;f:view&gt;<br />  &lt;h:form id="fors" onsubmit="return confirmSubmit()"&gt;<br />    &lt;h:panelGrid id="act" columns="1" cellpadding="0" cellspacing="0" width="100%" border="0" columnClasses="btstyle"&gt;<br />      &lt;h:panelGroup&gt;<br />        &lt;h:selectBooleanCheckbox id="selectall" onclick="SetCheckedStatus()"/&gt;<br />        &lt;h:outputLabel for="selectall"&gt;<br />          &lt;h:outputText value="全选"/&gt;<br />        &lt;/h:outputLabel&gt;<br />        &lt;h:commandButton value="编辑" onclick="setPress('editor')" action="editor" actionListener="#{cd.editorTriggered}"/&gt;<br />        &lt;h:commandButton value="删除" onclick="setPress('del')" actionListener="#{paramsetup.delDirectoryTriggered}"/&gt;<br />        &lt;h:commandButton value="增加" onclick="setPress('add')"/&gt;<br />        &lt;h:commandButton value="保存" onclick="setPress('save')" actionListener="#{paramsetup.saveActionTriggered}"/&gt;<br />      &lt;/h:panelGroup&gt;<br />    &lt;/h:panelGrid&gt;<br />    &lt;h:dataTable id="data" value="#{cd.model}" var="c" cellpadding="5" cellspacing="10"&gt;<br />      &lt;h:column&gt;<br />        &lt;f:facet name="header"&gt;<br />          &lt;h:outputText id="headerText1" value="选择"/&gt;<br />        &lt;/f:facet&gt;<br />        &lt;h:selectBooleanCheckbox id="selectBooleanCheckbox1" value="#{c.editor}"/&gt;<br />      &lt;/h:column&gt;<br />      &lt;h:column&gt;<br />        &lt;f:facet name="header"&gt;<br />          &lt;h:outputText id="headerText2" value="书名"/&gt;<br />        &lt;/f:facet&gt;<br />        &lt;h:outputText value="#{c.title}"/&gt;<br />      &lt;/h:column&gt;<br />      &lt;h:column&gt;<br />        &lt;f:facet name="header"&gt;<br />          &lt;h:outputText id="headerText3" value="作者"/&gt;<br />        &lt;/f:facet&gt;<br />        &lt;h:outputText value="#{c.artist}"/&gt;<br />      &lt;/h:column&gt;<br />      &lt;h:column&gt;<br />        &lt;f:facet name="header"&gt;<br />          &lt;h:outputText id="headerText4" value="价格"/&gt;<br />        &lt;/f:facet&gt;<br />        &lt;h:outputText value="#{c.price}"/&gt;<br />      &lt;/h:column&gt;<br />    &lt;/h:dataTable&gt;<br />  &lt;/h:form&gt;<br />&lt;/f:view&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p>
		</p>
		<hr />
		<p>编辑页面也就弹出对话窗页面editor.jsp<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html; charset=GBK"%&gt;<br />&lt;<a href="mailto:%@taglib">%@taglib</a> uri="<a href="http://java.sun.com/jsf/core">http://java.sun.com/jsf/core</a>" prefix="f"%&gt;<br />&lt;<a href="mailto:%@taglib">%@taglib</a> uri="<a href="http://java.sun.com/jsf/html">http://java.sun.com/jsf/html</a>" prefix="h"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;editor&lt;/title&gt;<br />&lt;script type=""&gt;<br />function confirmSubmit(){<br /> setInterval('opener.window.location.href=opener.window.location.href;window.close();',20);</p>
		<p>}</p>
		<p>&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body bgcolor="#ffffff"&gt;<br />&lt;f:view&gt;<br />  &lt;h:form id="fors" onsubmit="return confirmSubmit()"&gt;<br />    &lt;h:dataTable id="data" value="#{cd.editorModel}" var="c" cellpadding="5" cellspacing="10"&gt;<br />      &lt;h:column&gt;<br />        &lt;f:facet name="header"&gt;<br />          &lt;h:outputText id="headerText2" value="书名"/&gt;<br />        &lt;/f:facet&gt;<br />        &lt;h:inputText value="#{c.title}"/&gt;<br />      &lt;/h:column&gt;<br />      &lt;h:column&gt;<br />        &lt;f:facet name="header"&gt;<br />          &lt;h:outputText id="headerText3" value="作者"/&gt;<br />        &lt;/f:facet&gt;<br />        &lt;h:inputText value="#{c.artist}"/&gt;<br />      &lt;/h:column&gt;<br />      &lt;h:column&gt;<br />        &lt;f:facet name="header"&gt;<br />          &lt;h:outputText id="headerText4" value="价格"/&gt;<br />        &lt;/f:facet&gt;<br />        &lt;h:inputText value="#{c.price}"/&gt;<br />      &lt;/h:column&gt;<br />    &lt;/h:dataTable&gt;<br />    &lt;h:panelGrid columns="1"&gt;<br />      &lt;h:commandButton value="保存" action="show" actionListener="#{cd.saveTriggered}"&gt;      &lt;/h:commandButton&gt;<br />      &lt;h:commandButton value="取消" type="button" onclick="javascript:window.close();"&gt;      &lt;/h:commandButton&gt;<br />    &lt;/h:panelGrid&gt;<br />  &lt;/h:form&gt;<br />&lt;/f:view&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></p>
		<p>
		</p>
		<hr />
		<p>backing bean CDBean.java</p>
		<p>package test;</p>
		<p>import java.util.*;<br />import javax.faces.model.ListDataModel;<br />import javax.faces.event.ActionEvent;</p>
		<p>public class CDBean {<br />    private List CDList = new ArrayList();</p>
		<p>    private ListDataModel model;</p>
		<p>    private ListDataModel editorModel;</p>
		<p>    public CDBean() {<br />        CDList.add(new CD("计算机应用", "长江", 25.00F, ""));<br />        CDList.add(new CD("java模式", "长江", 80.00F, ""));<br />        CDList.add(new CD("j2EE1.4标准教材", "长江", 100.00F, ""));<br />    }</p>
		<p>    public ListDataModel getModel() {<br />        if (model == null) {<br />            model = new ListDataModel(CDList);<br />        }<br />        return model;<br />    }</p>
		<p>    public ListDataModel getEditorModel() {<br />        return editorModel;<br />    }</p>
		<p>    public void editorTriggered(ActionEvent actionEvent) {<br />        List list = (List) model.getWrappedData();<br />        List editorList = new ArrayList();<br />        for (Iterator it = list.iterator(); it.hasNext(); ) {<br />            CD cd = (CD) it.next();<br />            if (cd.getEditor()) {<br />                editorList.add(cd);<br />            }<br />        }<br />        editorModel = new ListDataModel(editorList);<br />    }</p>
		<p>    public void saveTriggered(ActionEvent actionEvent) {<br />        List list = (List) editorModel.getWrappedData();<br />        for (Iterator it = list.iterator(); it.hasNext(); ) {<br />            CD cd = (CD) it.next();<br />            cd.setEditor(false);<br />        }</p>
		<p>    }</p>
		<p>}<br /></p>
		<hr />
		<br />辅助类CD.java<br />package test;
<p><br />public class CD implements java.io.Serializable {</p><p>    private Long id;</p><p>    private String artist;</p><p>    private String category;</p><p><br />    private String subCategory;</p><p><br />    private String title;</p><p><br />    private float price;</p><p>    private boolean editor;</p><p>    public CD() {<br />    }</p><p><br />    public CD(String aTitle, String aArtist, float aPrice, String aCategory) {<br />        this.title = aTitle;<br />        this.artist = aArtist;<br />        this.price = aPrice;<br />        this.category = aCategory;<br />    }</p><p><br />    public void setArtist(String aArtist) {<br />        this.artist = aArtist;<br />    }</p><p>    public String getArtist() {<br />        return artist;<br />    }</p><p><br />    public void setCategory(String aCategory) {<br />        this.category = aCategory;<br />    }</p><p><br />    public String getCategory() {<br />        return category;<br />    }</p><p><br />    public void setId(Long aId) {<br />        this.id = aId;<br />    }</p><p>    public Long getId() {<br />        return id;<br />    }</p><p><br />    public void setPrice(float aPrice) {<br />        this.price = aPrice;<br />    }</p><p><br />    public float getPrice() {<br />        return price;<br />    }</p><p><br />    public void setSubCategory(String aSubCategory) {<br />        this.subCategory = aSubCategory;<br />    }</p><p><br />    public String getSubCategory() {<br />        return subCategory;<br />    }</p><p><br />    public void setTitle(String aTitle) {<br />        this.title = aTitle;<br />    }</p><p><br />    public String getTitle() {<br />        return title;<br />    }</p><p>    public void setEditor(boolean editor){<br />        this.editor=editor;<br />    }<br />    public boolean getEditor(){<br />        return this.editor;<br />    }<br />}<br /></p><hr /><p>配置文件faces-config.xml<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "<a href="http://java.sun.com/dtd/web-facesconfig_1_1.dtd">http://java.sun.com/dtd/web-facesconfig_1_1.dtd</a>"&gt;</p><p>&lt;faces-config xmlns="<a href="http://java.sun.com/JSF/Configuration">http://java.sun.com/JSF/Configuration</a>"&gt;<br />  &lt;managed-bean&gt;<br />    &lt;managed-bean-name&gt;cd&lt;/managed-bean-name&gt;<br />    &lt;managed-bean-class&gt;test.CDBean&lt;/managed-bean-class&gt;<br />    &lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;<br />  &lt;/managed-bean&gt;<br />  &lt;navigation-rule&gt;<br />    &lt;from-view-id&gt;/show.jsp&lt;/from-view-id&gt;<br />    &lt;navigation-case&gt;<br />      &lt;from-outcome&gt;editor&lt;/from-outcome&gt;<br />      &lt;to-view-id&gt;/editor.jsp&lt;/to-view-id&gt;<br />    &lt;/navigation-case&gt;<br />  &lt;/navigation-rule&gt;<br />  &lt;navigation-rule&gt;<br />    &lt;from-view-id&gt;/editor.jsp&lt;/from-view-id&gt;<br />    &lt;navigation-case&gt;<br />      &lt;from-outcome&gt;show&lt;/from-outcome&gt;<br />      &lt;to-view-id&gt;/show.jsp&lt;/to-view-id&gt;<br />    &lt;/navigation-case&gt;<br />  &lt;/navigation-rule&gt;<br />&lt;/faces-config&gt;</p><p></p><hr /><p>最后的总结:在弹出窗口里是没法用jsf的验证机制的,原因是setInterval('opener.window.location.href=opener.window.location.href;window.close();',20);有一个javascript的opener对象的引用,当用jsf验证时如果有非法输入,弹出窗口页面就会刷新,这就会丢失对opener的引用,而且还存在另一个问题就是如果验证正确就应该关闭对话框,失败就不应该关闭对话框.这个问题也不好解决. 那么是不是就没办法解决验证的问题呢?不是的.可以在弹出页面里用frame引用两个页面,一个保持对opener的引用,另一个就是编辑作用了,具体作法就是在backing bean 里添加一个action动态导航方法里调用FacesContext.getCurrentInstance().getResponseWriter().write(); 在write 方法里打印用于控制关闭对话框的javascript代码,因为action方法能执行就表示验证一定通过了.如果验证不通过的话就会返回自身页面抛出异常.在write 方法里,最后在write 方法的最后一定不能忘了 FacesContext.getCurrentInstance().responseComplete()以跳过转向的执行,也就是跳过jsf生命的最后一个阶段.还有另一个更好的解决方案,用Ajax实现验证,具体实现就不再赘述了,因为它不是jsf的一部分:) 欢迎加入QQ群:30406099 </p><p> </p><img src ="http://www.blogjava.net/fool/aggbug/60963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fool/" target="_blank">傻  瓜</a> 2006-07-31 10:44 <a href="http://www.blogjava.net/fool/archive/2006/07/31/60963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现jsf中的h:dataTable 组件的h:column内的h:selectBooleanCheckbox组件的全选的方法</title><link>http://www.blogjava.net/fool/archive/2006/07/07/57137.html</link><dc:creator>傻  瓜</dc:creator><author>傻  瓜</author><pubDate>Fri, 07 Jul 2006 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/fool/archive/2006/07/07/57137.html</guid><wfw:comment>http://www.blogjava.net/fool/comments/57137.html</wfw:comment><comments>http://www.blogjava.net/fool/archive/2006/07/07/57137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fool/comments/commentRss/57137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fool/services/trackbacks/57137.html</trackback:ping><description><![CDATA[
		<p>    标题太长,不知道怎么用更准确的语言来形容这个,呵呵:) 初学jsf时遇到不少的问题,比如在客端视图中有一个&lt;table&gt;标签的一列均是&lt;input type="checkbox" /&gt;标签如<br />&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;input type="checkbox" /&gt;&lt;/td&gt;&lt;td&gt;name&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;input ="checkbox" /&gt;&lt;/td&gt;&lt;td&gt;name&lt;/td&gt;&lt;/tr&gt;&lt;table&gt; .要实现所有的&lt;input&gt;标签的全选在jsp中我们可以给所有&lt;input&gt;标签的name属性赋一个相同的值再用javascript进行循环处理就可以了. 但是在jsf中就不是那么容易的事了,因为jsf会给所有的&lt;input&gt;标签生成一个不相同值的id属性和一个不同值name属性.<br />    来看看jsf中的解决方案<br />jsf中 &lt;h:dataTable&gt; 通常绑定一个ListDataModel 或者是ArrayDataModel等数据模型.而该数据模型通常封装List,或都Array之类的对象,这些对象的元素都是一些bean 对象,把数据库中表的字段映射成bean  再给该bean添加一个额外boolean型的属性,用来绑定 &lt;h:selectBooleanCheckbox&gt;组件,在backing bean中就可以通过判断这个绑定值来处理&lt;h:dataTable&gt;组件选中的行对应的数据模型所拥有的bean了.  那么如何在页面实现&lt;input type="checkbox"/&gt;的全选呢,还是用javascript 只是javascript要先对&lt;table&gt;标签进行操作了 这就没jsp中那么直观. js代码<br /></p>
		<p>
		</p>
		<hr />
		<p>
				<br />&lt;/script&gt;&lt;script  language="javascript" type=""&gt;<br /> function SetCheckedStatus()<br />{<br />    var oTable=document.all['fors:data'];<br /> var oChkAll=document.all['fors:selectall']</p>
		<p> if(oTable != null &amp;&amp; oChkAll != null)<br /> {<br />  for(j=1;j&lt;oTable.rows.length;j++)<br />  {<br />   oTable.rows(j).cells(0).children.item(0).checked=oChkAll.checked;<br />  }<br /> }<br />}</p>
		<p>&lt;/script&gt;<br /><br />jsf页面代码:<br /></p>
		<p>
		</p>
		<hr />
		<p>&lt;<a href="mailto:%@page">%@page</a> contentType="text/html; charset=GB2312"%&gt;<br />&lt;<a href="mailto:%@taglib">%@taglib</a> uri="<a href="http://java.sun.com/jsf/core">http://java.sun.com/jsf/core</a>" prefix="f"%&gt;<br />&lt;<a href="mailto:%@taglib">%@taglib</a> uri="<a href="http://java.sun.com/jsf/html">http://java.sun.com/jsf/html</a>" prefix="h"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />  &lt;script type="" src="css/screen.js"&gt;&lt;/script&gt;<br />&lt;script language="javascript" type=""&gt;<br /> pressed="fail";<br />function setPress(newValue){<br />   pressed=newValue;<br />   }<br />function confirmSubmit(){<br />  if(pressed=="add"){<br />   wid =calculateCenterWidth(340);<br />    hi=calculateCenterHeight(160);<br />    popup=window.open("adduser.faces","popup","height=160,width=340,toolbar=no,left="+wid+",top="+hi+",menubar=no,scrollbars=no");<br />    popup.focus();<br />    return false;<br />  }<br />  if(pressed=="del"){<br />    return confirm("确定要删除吗?");<br />  }<br />  if(pressed=="save"){<br />    return confirm("确定要修改吗?");<br />  }<br />}</p>
		<p>&lt;/script&gt;&lt;script  language="javascript" type=""&gt;<br /> function SetCheckedStatus()<br />{<br />    var oTable=document.all['fors:data'];<br /> var oChkAll=document.all['fors:selectall']</p>
		<p> if(oTable != null &amp;&amp; oChkAll != null)<br /> {<br />  for(j=1;j&lt;oTable.rows.length;j++)<br />  {<br />   oTable.rows(j).cells(0).children.item(0).checked=oChkAll.checked;<br />  }<br /> }<br />}</p>
		<p>&lt;/script&gt;&lt;link href="css/styles3.css" rel="stylesheet" type="text/css"/&gt;<br />&lt;title&gt;用户管理&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body bgcolor="#ffffff"&gt;<br />&lt;f:view&gt;<br />  &lt;h:form id="fors" onsubmit="return confirmSubmit()"&gt;<br />    &lt;h:panelGrid id="top" cellspacing="0" cellpadding="0" width="100%" border="0" columns="3" columnClasses="left,topMiddle,right"&gt;<br />      &lt;h:graphicImage value="images/jiao1.gif"/&gt;<br />      &lt;h:outputText value=""/&gt;<br />      &lt;h:graphicImage value="images/jiao2.gif"/&gt;<br />    &lt;/h:panelGrid&gt;<br />    &lt;h:panelGrid cellspacing="0" cellpadding="0" width="100%" border="0" columnClasses="middleLeft,btstyle,middleRight" columns="3"&gt;<br />      &lt;h:outputText value=""/&gt;<br />      &lt;h:panelGroup&gt;<br />        &lt;!-- 数据--&gt;<br />        &lt;h:panelGrid id="act" columns="1" cellpadding="0" cellspacing="0" width="100%" border="0" columnClasses="btstyle"&gt;<br />          &lt;h:panelGroup&gt;<br />            &lt;h:selectBooleanCheckbox id="selectall" onclick="SetCheckedStatus()"/&gt;<br />            &lt;h:outputLabel for="selectall"&gt;<br />              &lt;h:outputText value="全选"/&gt;<br />            &lt;/h:outputLabel&gt;<br />            &lt;h:commandButton value="编辑" onclick="setPress('editor')"/&gt;<br />            &lt;h:commandButton value="删除" onclick="setPress('del')" actionListener="#{function.delUserTriggered}"/&gt;<br />            &lt;h:commandButton value="增加" onclick="setPress('add')"/&gt;<br />            &lt;h:commandButton value="保存" onclick="setPress('save')" actionListener="#{function.saveUserTriggered}"/&gt;<br />          &lt;/h:panelGroup&gt;<br />        &lt;/h:panelGrid&gt;<br />        &lt;h:dataTable id="data" value="#{function.userInfoModel}" var="user" width="100%" border="1" cellpadding="0" cellspacing="0"&gt;<br />          &lt;h:column&gt;<br />            &lt;f:facet name="header"&gt;<br />              &lt;h:outputText id="headerText1" value="选择"/&gt;<br />            &lt;/f:facet&gt;<br />            &lt;h:selectBooleanCheckbox id="selectBooleanCheckbox1" value="#{user.editor}"/&gt;<br />          &lt;/h:column&gt;<br />          &lt;h:column&gt;<br />            &lt;f:facet name="header"&gt;<br />              &lt;h:outputText id="headerText7" value="登录名"/&gt;<br />            &lt;/f:facet&gt;<br />            &lt;h:outputText value="#{user.username}" rendered="#{not user.editor}"/&gt;<br />            &lt;h:inputText value="#{user.username}" rendered="#{user.editor}"&gt;            &lt;/h:inputText&gt;<br />          &lt;/h:column&gt;<br />          &lt;h:column&gt;<br />            &lt;f:facet name="header"&gt;<br />              &lt;h:outputText id="headerText2" value="用户名"/&gt;<br />            &lt;/f:facet&gt;<br />            &lt;h:outputText value="#{user.name}" rendered="#{not user.editor}"/&gt;<br />            &lt;h:inputText value="#{user.name}" rendered="#{user.editor}"&gt;            &lt;/h:inputText&gt;<br />          &lt;/h:column&gt;<br />          &lt;h:column&gt;<br />            &lt;f:facet name="header"&gt;<br />              &lt;h:outputText id="headerText3" value="用户密码"/&gt;<br />            &lt;/f:facet&gt;<br />            &lt;h:outputText value="********" rendered="#{not user.editor}"&gt;            &lt;/h:outputText&gt;<br />            &lt;h:inputSecret id="inputSecret1" value="#{user.password}" redisplay="true" rendered="#{user.editor}"/&gt;<br />            &lt;h:message for="inputSecret1"/&gt;<br />          &lt;/h:column&gt;<br />          &lt;h:column&gt;<br />            &lt;f:facet name="header"&gt;<br />              &lt;h:outputText id="headerText4" value="性别"/&gt;<br />            &lt;/f:facet&gt;<br />            &lt;h:outputText value="#{user.xingbie}" rendered="#{not user.editor}"/&gt;</p>
		<p>            &lt;h:selectOneListbox id="selectOneListbox1"  size="1" value="#{user.xingbie}"  rendered="#{user.editor}" style="width:100px"&gt;<br />                &lt;f:selectItems value="#{function.xinbeiList}"/&gt;<br />              &lt;/h:selectOneListbox&gt;<br />              &lt;h:message for="selectOneListbox1"/&gt;</p>
		<p>
				<br />          &lt;/h:column&gt;<br />          &lt;h:column&gt;<br />            &lt;f:facet name="header"&gt;<br />              &lt;h:outputText id="headerText5" value="岗位"/&gt;<br />            &lt;/f:facet&gt;<br />            &lt;h:outputText value="#{user.gangwei}" rendered="#{not user.editor}"/&gt;<br />            &lt;h:inputText value="#{user.gangwei}" rendered="#{user.editor}"&gt;            &lt;/h:inputText&gt;<br />          &lt;/h:column&gt;<br />          &lt;h:column&gt;<br />            &lt;f:facet name="header"&gt;<br />              &lt;h:outputText id="headerText6" value="部门"/&gt;<br />            &lt;/f:facet&gt;<br />            &lt;h:outputText value="#{user.bumen}" rendered="#{not user.editor}"/&gt;<br />            &lt;h:inputText value="#{user.bumen}" rendered="#{user.editor}"&gt;            &lt;/h:inputText&gt;<br />          &lt;/h:column&gt;<br />        &lt;/h:dataTable&gt;<br />        &lt;!-- 数据--&gt;<br />      &lt;/h:panelGroup&gt;<br />      &lt;h:outputText value=""/&gt;<br />    &lt;/h:panelGrid&gt;<br />    &lt;table id="fors:bottom" border="0" cellpadding="0" cellspacing="0" width="100%"&gt;<br />    <br />      &lt;tbody&gt;<br />        &lt;tr&gt;<br />          &lt;td class="left"&gt;<br />            &lt;img src="images/jiao3.gif" alt=""/&gt;<br />          &lt;/td&gt;<br />          &lt;td class="bottomMiddle"&gt;          &lt;/td&gt;<br />          &lt;td class="right"&gt;<br />            &lt;img src="images/jiao4.gif" alt=""/&gt;<br />          &lt;/td&gt;<br />        &lt;/tr&gt;<br />      &lt;/tbody&gt;<br />    &lt;/table&gt;<br />  &lt;/h:form&gt;<br />&lt;/f:view&gt;</p>
		<p>&lt;/body&gt;<br />&lt;/html&gt;<br /><br />因为时间原因也懒的写一个完整的应用了,不过我想有以上的代码也够了,毕竟这里只是解决一个小问题.<br /><br /><br /><br /></p>
<img src ="http://www.blogjava.net/fool/aggbug/57137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fool/" target="_blank">傻  瓜</a> 2006-07-07 15:02 <a href="http://www.blogjava.net/fool/archive/2006/07/07/57137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>