??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲乱码国产一区网址,黑人粗长大战亚洲女2021国产精品成人免费视频 ,亚洲av永久无码精品国产精品 http://www.tkk7.com/fangshun/zh-cnSat, 10 May 2025 21:17:20 GMTSat, 10 May 2025 21:17:20 GMT60jsf UIComponentlg接口详细注释说明Qjsf1.1规范Q?/title><link>http://www.tkk7.com/fangshun/archive/2007/11/02/154673.html</link><dc:creator>斚w</dc:creator><author>斚w</author><pubDate>Fri, 02 Nov 2007 08:38:00 GMT</pubDate><guid>http://www.tkk7.com/fangshun/archive/2007/11/02/154673.html</guid><wfw:comment>http://www.tkk7.com/fangshun/comments/154673.html</wfw:comment><comments>http://www.tkk7.com/fangshun/archive/2007/11/02/154673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fangshun/comments/commentRss/154673.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fangshun/services/trackbacks/154673.html</trackback:ping><description><![CDATA[<p>UIComponent实现了StateHolder接口,StateHolder接口表示lgh了状态?br /> StateHolder接口中常用到saveStateQrestoreState两个Ҏ(gu)Q在开发自定义lg的时候,需要实现它们,具体使用上经常是把你的组件中全局变量q行状态化Q就是在Object[]中定义它们,jsf在恢复和保存两个阶段分别调用lg的这两个Ҏ(gu)Q把面的状态数据恢复在Object[]Q把lg的Object[]数据渲染到页面。isTransientQsetTransientҎ(gu)表式Q你的组件是否想状态化?br /> <br /> UIComponentlg主要api<br /> 1.public abstract java.util.Map getAttributes()  该方法会获得该组件的所有属性?br /> <br /> 2. public abstract javax.faces.el.ValueBinding getValueBinding(java.lang.String name) 该方法会从组件的值绑定集合表中获取对应的值绑定对象,值绑定对象(ValueBinding Q的目的是用EL表达式解析你l定的模型|例如面有个Q?use.nameQ?那么值绑定就会解析这个字W串Q通过变量解析获取User对象Q再用D析获取name倹{?br /> <br /> 3.public abstract java.lang.String getClientId(javax.faces.context.FacesContext context) 主要是在UIViewRootlg中生成组件在面的映IdQ如果你为组件定义了一个idQ那么他会基于这个id生成一个具有组件层ơ的客户端IdQ?:'来分隔,如果没有为组件定义id,那么会动态生成一个idQ例如会在页面渲染结果看?form1:input1'q样的Id,是告诉你一个Inputlg的id?input'Q它在id?form1'的formlg中。clientId常常在jsf内部对组件用来整理,定位?br /> <br />  4.public abstract java.lang.String getFamily() 告诉你这个组件属于那个家族的Q用的不多。主要是内部创徏渲染cM用?br /> <br /> 5. public abstract java.lang.String getId() q个Id是面上你指定的组件IdQ它可以让你方便的查扄件树上的lgQ最好给你的面lg都设定一个idQ在服务端开发有时候会用到Q如果没有设定,jsf会自动生成一个唯一的idQ如果自定义id在组件中有冲H,那么jsf会抛出id冲突异常?br /> <br /> 6.public abstract javax.faces.component.UIComponent getParent() 得到该组件的父组Ӟ注意Qhtml标记不会成ؓ一个组件?br /> <br /> 7. public abstract boolean isRendered() 如果该组件这个方法设定ؓfalseQ那么该lg以及它的子组仉会停止解码,验证Q值更斎ͼ渲染{操?br /> <br /> 8. public abstract java.lang.String getRendererType()  指定了该lg使用哪个渲染c进行渲染,q就是组件与渲染分离Qƈ且互相可以复用的机制?br /> <br /> 9. public abstract boolean getRendersChildren();  如果lg的此Ҏ(gu)讑֮为真Q那么jsfl寻扑֮的子lgq行渲染。否者渲染只渲染到当前组件?br /> <br /> 10. public abstract java.util.List getChildren(); 获得该组件的直属子组件列?br /> <br /> 11. public abstract int getChildCount() 获得获得该组件的直属子组件列表数<br /> <br /> 12.public abstract javax.faces.component.UIComponent findComponent(java.lang.String expr) L该组件的子组?通过面上指定的lgIdQ在它的父组件的findComponentL找这个组Ӟ一般用于自定义lg开发上Q例如:jsf消息渲染的时候就是通过findComponentҎ(gu)d找for属性定义的lg?br /> <br /> 13.public abstract java.util.Map getFacets() 得到该组件的所有facetcd的组Ӟfacetlg主要作用Q一个功能强大的lg中会有很多增强功能,q些增强功能可以定义成多个小的facetlgQ这样可以从lg的主功能中分解开Q降低组件内部功能的耦合性,同时也可以做为组件的插g机制来扩展?br /> <br /> 14.public abstract java.util.Iterator getFacetsAndChildren() 获取自己所以的直属子组件和facetlgQ常用在子组件查找操作上Q例如jsf核心机制中,遍历lg增加事g时就要递归使用此方法?br /> <br /> 15.    public abstract void broadcast(javax.faces.event.FacesEvent event) 对于jsf生命周期的几个阶D都会用到递归遍历lg的事Ӟ使用的就是这个方法,常用在内部机制上。标准的观察者模式?br /> <br /> 16.    public abstract void decode(javax.faces.context.FacesContext context) jsf声明周期中的解码部分是调用此方法,主要用在应用h值阶D,通过递归遍历Q每一个组件会在这个阶D|作request{容器对象来实现q藏requesth的表现逻辑Qƈ装成事件交l组件的事g列表Q由后面的阶D|处理。需要注意的是很可能此方法会把工作委托给渲染cȝdecode上,所以jsf的渲染机制不仅仅是简单的输出html{展现标讎ͼq用来封装和隐藏容器内的通信机制Q让容器内对象从我们眼前消失Q?br /> <br /> 17.  </p> <p>    public abstract void encodeBegin(javax.faces.context.FacesContext context)<br />             throws java.io.IOException;</p> <p>    public abstract void encodeChildren(javax.faces.context.FacesContext context)<br />             throws java.io.IOException;</p> <p>    public abstract void encodeEnd(javax.faces.context.FacesContext context)<br />             throws java.io.IOException;</p> <p>lg渲染阶段需要经历的步骤Q渲染机制是一个复杂的q程Q原理上是把tag标记渲染的工作委托给了servlet之上来处理,jsf 的tag标记只作为组Ӟ视图之间的映之用。这三个阶段更明了渲染成视图标记这样一个工作,同样可以委托l渲染类d?br /> <br />  18.protected abstract void addFacesListener(javax.faces.event.FacesListener listener) 为组件增加监听,标准的观察者模式?br /> <br /> 19.protected abstract javax.faces.event.FacesListener[] getFacesListeners(java.lang.Class clazz) 得到lg的监听列表,监听器在lg的事件列表遍历时会被调用Qclazz参数是用来区分不同的监听器,目前常用ActionListener.class,ValueChangeListener.class<br /> <br /> 20.protected abstract void removeFacesListener(javax.faces.event.FacesListener listener);从组件的监听列表中删除不需要的监听器?br /> <br /> </p> 21.public abstract void queueEvent(javax.faces.event.FacesEvent event) 把新创徏的事件增加到lg的事仉列,此方法常常用在应用请求值阶D,每个lg会根据条件创q事gQ加入到事g列表Q所有事件会全局的放入UIViewRootlg中,UIViewRootlg是jsf各个阶段对组件树q行递归遍历处理的启动点?br /> <br /> 22. <p>   public abstract void processRestoreState(javax.faces.context.FacesContext context,<br />                                              java.lang.Object state);</p> <p>    public abstract void processDecodes(javax.faces.context.FacesContext context);</p> <p>    public abstract void processValidators(javax.faces.context.FacesContext context);</p> <p>    public abstract void processUpdates(javax.faces.context.FacesContext context);</p> <p>    public abstract java.lang.Object processSaveState(javax.faces.context.FacesContext context);</p>     jsf生命周期中组仉要处理的五个重要阶段:恢复状态,解码Q验证,更新Q保持状态(另外包括调用应用Q渲染)Q开发自定义lgQ需要特别关注这些方面,渲染阶段q件的~码Ҏ(gu)实现Q调用应用阶D则是actionListener监听器集合的处理期?br /> <br /> 23. protected abstract javax.faces.context.FacesContext getFacesContext() 获取jsf上下文环境,FacesContext 是一个线E安全模型,在设计上接近pojoQ所以在jsf环境对FacesContext的调用得C化,但是jsf整体的编E规则上更希望你能把FacesContext 作ؓ命o参数传递给各个实现l节Q以保证上下文的真实性,q一点在开发自定义lg上要注意Q?br /> 24. protected abstract javax.faces.render.Renderer getRenderer(javax.faces.context.FacesContext context) 获取当前lg的渲染类? <img src ="http://www.tkk7.com/fangshun/aggbug/154673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fangshun/" target="_blank">斚w</a> 2007-11-02 16:38 <a href="http://www.tkk7.com/fangshun/archive/2007/11/02/154673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当前阶段在项目中选择jsf技术的一些徏?/title><link>http://www.tkk7.com/fangshun/archive/2007/10/21/154648.html</link><dc:creator>斚w</dc:creator><author>斚w</author><pubDate>Sun, 21 Oct 2007 03:38:00 GMT</pubDate><guid>http://www.tkk7.com/fangshun/archive/2007/10/21/154648.html</guid><wfw:comment>http://www.tkk7.com/fangshun/comments/154648.html</wfw:comment><comments>http://www.tkk7.com/fangshun/archive/2007/10/21/154648.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.tkk7.com/fangshun/comments/commentRss/154648.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fangshun/services/trackbacks/154648.html</trackback:ping><description><![CDATA[   1.不要盲目使用jsf1.2规范的实现框Ӟ<br />         目前sunQmyfaces都推Zjsf1.2规范的实玎ͼ但是各种jsf1.2支持q没有跟上,所以小心用?br />        jsf1.2的优势主要体现在l一的EL表达式,也就是说你可以在面上,混合使用只要支持了统一表达式的各种tag标记Q同时可以n受jsf在表现层开发上带来的强大支持,q就又需要两个规范的支持Q一个是jsp规范Q一个是jstl规范Qjsp2.1规范支持l一ELQ它在tomat6.0.14以后才开始支持,glassFish默认支持Q这些都是基设施Qjstl把不同的taglibs定义了一个规范,你可以选择各种实现了jstl规范的taglibs框架Q目前大多数使用的是apache 带的标准实现Q但是apache仍然没有推出jstl1.2规范的实玎ͼ只有jstl1.2规范以后开始支持统一ELQ目前可能只有glassfish有jstl1.2的默认实玎ͼ我没有试q能不能复用在其他容器下Q但是在没有验证之前Q请斟酌使用Qjsf1.2在统一EL斚w的常用应用就是和jstl标记混合。如果你的项目仍然是tomcat5.5或者jboss的容器,使用jsf1.2没有多大优势Q而且jsf1.2虽然推出了不同的实现框架Q但是增强框架仍然没有看刎ͼmyfacesZjsf1.2?nbsp;Tomahawk q没有推出支?.2规范的实玎ͼ如果仅仅使用sun的标准实现和myfaces的标准实玎ͼ在项目中你会步l艰Q?br /> <br /> 2.如果没有商业jsf框架选择Q请选择myfaces的增强框架Tomahawk<br />   sun的标准实现和myfaces的标准实现都是针对规范该有的内容q行实现Qƈ没有在组件方面进行必要的增强Q这也是我主要用Tomahawkq种对组件增强框架的原因?br /> <br /> 3.现阶D不要相信IDE工具支持<br />    netbeans的可视化操作使用的是自己的jsf实现Q没有myfaces框架的支持,需要等?.0推出才能验证它的优势Q其他包括商业工P使用后错误很多,感觉是在测试我们的接受能力Q现阶段我对jsf的可视化工具不抱希望Q如果你有信心,可以试试工具Q现阶段我推荐的方式是jsf手动开发,在开发中U篏l验Q?br /> <br /> 4.不要随意使用ajax支持的jsflg?br />   如果你是web2.0的支持者,现阶D还是不要用jsf好,jsf是下一代web2.0的主对{如果你是标准的企业开发,使用标准方式q行面h。jsf最大的贡献不是支持ajaxQ而是内部实现了一个可以透明化http无状态的机制Q这U机制让我们在开发上高度xlg化业务,让我们的开发能走的更远Q而用ajax在理Z和标准方式一P在服务端hl一的模型处理,但是javascript在工E开发上是高度的复杂和麻烦,jsf在处理纯html上在现阶D也是常常出C些让人接受不了的问题Q有时候需要自己手动HackQ但是好在htmlq不复杂Q如果页面端大量javascriptQ你怎么办,q还不算h带来的问题,ajax框架本n的质量!<br /> <br /> 6.如果目中决定用jsfQ请找一个能拿的住jsf的hQ整个开发不仅仅会用jsfQ还有؜合用其他页面技术,如果q个人对表现层的理解包括jsf的理解不够,目在很多方面的质量会有折扣Q但是对于整个开发团队用jsf会比使用其他表现层技术更单,更高效,开发质量也会更高,q都要看jsf负责人的技术应变能力了Q?br /> <br /> 5.q是老调重提Q在目中最好加入seam的支持,会让jsf的开发变的简单! <img src ="http://www.tkk7.com/fangshun/aggbug/154648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fangshun/" target="_blank">斚w</a> 2007-10-21 11:38 <a href="http://www.tkk7.com/fangshun/archive/2007/10/21/154648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>׃n我在目中用jsf的一些经验二-seam的配|,上下文介l?/title><link>http://www.tkk7.com/fangshun/archive/2007/10/20/154469.html</link><dc:creator>斚w</dc:creator><author>斚w</author><pubDate>Sat, 20 Oct 2007 05:55:00 GMT</pubDate><guid>http://www.tkk7.com/fangshun/archive/2007/10/20/154469.html</guid><wfw:comment>http://www.tkk7.com/fangshun/comments/154469.html</wfw:comment><comments>http://www.tkk7.com/fangshun/archive/2007/10/20/154469.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/fangshun/comments/commentRss/154469.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fangshun/services/trackbacks/154469.html</trackback:ping><description><![CDATA[     前一D|间我写过一?a title="׃n我在目中用jsf的一些经? href="http://www.tkk7.com/fangshun/archive/2007/09/09/143737.html">׃n我在目中用jsf的一些经?/a>Q主要是概要的提Z一些jsf使用上的Q这ơ我惛_文章里主要是把seam在jsf中的使用l验提一下,能让更多的h了解seam的实际应用和优势?br />     1.seam配置时要注意的地方:<br />     Q?Qfaces-config.xml里面要加入一个seam的阶D늛听:<br />      <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff"><</span><span style="color: #800000">lifecycle</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"><</span><span style="color: #800000">phase-listener</span><span style="color: #0000ff">></span><span style="color: #000000">org.jboss.seam.jsf.SeamPhaseListener</span><span style="color: #0000ff"></</span><span style="color: #800000">phase-listener</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000"><!--</span><span style="color: #008000"> <phase-listener>com.future.egov.jsf.ext.event.DebugPhaseListener</phase-listener> </span><span style="color: #008000">--></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"></</span><span style="color: #800000">lifecycle</span><span style="color: #0000ff">></span></div> <br />      seam动v来的条g是从这里发LQseam通过q个监听器对jsf的各个阶D进行必要的增强以及植入自己的CONVERSATION生命周期Q对于这个监听器的具体细节工作,我还需要更多时间研I?仍在了解?<br />       (2) 一定要在工E类路径的根下放|一个seam.properties文gQ你可以讄为空内容Q主要是引导seam在初始化的时候加载这个\径下所有标注ؓseamlg的对象(通过@Name注释Q,<a >http://www.ibm.com/developerworks/cn/java/j-seam1/</a>  seam无缝集成jsfl我了提C!<br />       (3)web.xml下最配|是加入seam监听?br />          <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">    </span><span style="color: #0000ff"><</span><span style="color: #800000">listener</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />          </span><span style="color: #0000ff"><</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">></span><span style="color: #000000">org.jboss.seam.servlet.SeamListener</span><span style="color: #0000ff"></</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">listener</span><span style="color: #0000ff">></span></div>        在容器加载工E的时候,初始化seam框架?br />       以上三处的配|,你就可以在Q何容器中使用seam了!更多的配|大家可以找参考了解吧Q我目前在项目中׃用了以上配置。其他配|主要是在seam对ajaxQejb3的支持上Q不qseam很新Q什么事都会发生Q?br />    2.常用的注释:Q所有被seam定义的领域对象都可以认ؓ是seamlgQ?br />      Q?Q@Name(XXX)Q需要在你的领域cM定义Q定义了seamlg的名Uͼ对于jsf来说是backing-beanQ也是说你不用在faces-config中配|managedbean了!<br /> <br />       Q?Q@Scope(ScopeType.XXX)Q可以在你的领域cM定义Q表C个被定义的seamlg在什么上下文中,jsf中主要包括page,event,session,application,conversationq些Scope。我在项目中主要使用event,session,conversation。event是把组件放入了request中,session同理Qconversation是seam独创的声命周期,conversation短声命周期类似requestQ但是会保存一些jsfҎ(gu)在请求中丢失的数据(jsf只是保存lgQ不保存lg渲染的数据,除非是EditableValueHolderlgQ有时候需要通过myfaces的savelg和updateActionListenerlg来恢复这些数据)Q具体保存细节,需要看使用的情况,我有q样一个经验:当定义成event上下文,在页面的一ơ请求中Q有些数据请求时q在Q但是到渲染时就不见了,常见在dataTablelgQmyfaces的commandNavigationlgQ但是换成conversation上下文,q些数据在渲染时又找回来了。但是对于跨度比较大层面Q我q是推荐使用myfaces提供的保持机Ӟ我一般用updateActionListenerQ而savelg在seam1.2.1的环境下会出错。如果再有更大跨度,可以用conversation上下文的长会话了?br /> <br />        Q?Q@BeginQjoin=trueQ?@End(beforeRedirect=true)Q当触发了带有@Begin标记的方法,conversation的长会话p样开始了Q主要是Z长时间用已l加载到conversation域中的对象或者属性(如果定义了conversation但ƈ没有加蝲的可不算Q:join=true是告诉你会话中有同名值时l箋赋|q有一个注释参数ifOutcome=XXXQ就是看你的Ҏ(gu)q回的字W串是否和ifOutcome定义的字W串相匹配,如果匚w开始长会话。当在长会话期间执行到某个方法带有@End标记那么q个长会话就会结束,q样防止了内存泄漏问题,我认是一个权衡的l果Q也许用L的会点击那个带有l束标记Ҏ(gu)的按钮。beforeRedirect为真׃在结束时清掉conversation上下文所有的信息Q如果beforeRedirect=falseQconversation只是变成短会话,在结束后的那ơ请求中q可以用conversation中的数据Q一般会用在messages提示q个应用场景中用,但是如果要返回数据列表有时就需要清I所有数据,防止数据列表q会重现长会话开始前的情c?br /> <br />        Q?QIn(value=XXX,rquest=false,ScopeType=XXX)QOut(value=XXX,rquest=false,ScopeType=XXX) seam把它定义为双。In是最常用的标注,你可以用In导入一个jsf的EL变量来获取jsf模型Q例如我要获取spring的业务beanQ而且业务bean已经定义成backing beanQ利用spring与jsf集成的方法:<br />         <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">    </span><span style="color: #008000"><!--</span><span style="color: #008000"> Managed Beans for options.jsp </span><span style="color: #008000">--></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">application</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">variable-resolver</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            org.springframework.web.jsf.DelegatingVariableResolver<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">variable-resolver</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">locale-config</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">default-locale</span><span style="color: #0000ff">></span><span style="color: #000000">gbk</span><span style="color: #0000ff"></</span><span style="color: #800000">default-locale</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">locale-config</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">message-bundle</span><span style="color: #0000ff">></span><span style="color: #000000">resources/MessageBundle</span><span style="color: #0000ff"></</span><span style="color: #800000">message-bundle</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #008000"><!--</span><span style="color: #008000">  <view-handler>com.icesoft.faces.facelets.D2DFaceletViewHandler<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </view-handler>        </span><span style="color: #008000">--></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">application</span><span style="color: #0000ff">></span></div> <br />      在seamlg中这样声明: <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">@In(value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#{userService}</span><span style="color: #000000">"</span><span style="color: #000000">, request</span><span style="color: #000000">=</span><span style="color: #0000ff">false</span><span style="color: #000000">)<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">private</span><span style="color: #000000"> UserService userService;</span></div> <br />  q个CZ为seamlg注入了由spring理的用h务对象,它的value是从jsf EL变量中获取,request=false在告诉seamQ如果当前的值没有找刎ͼ那么讄为空Q否者当出现没有扑ֈ的情况,seam会抛出空异常?br /> @Out属性主要是把处理过的属性g由seam重新再付l上下文也就是Out中所定义的ScopeType上下文,我认然是seam的一个特点,但是在我的应用中不多Q主要是注入而非双射Q如果它真的能在短期Conversation中有所作用来代替Myfaces的数据保持机Ӟ我想会好些,我目前只是在长Conversation有所应用?br /> <br /> <a href="mailto:3.@Factory">3</a> <a href="mailto:.@Factory">.@Factory</a>Q@DataModelSelectionQ@DataModelQ它们主要来代替数据列表的用,主要是减了代码量,Factory是在h值阶D就寚w要实例化的对象进行创建,DataModelSelection定义的属性,可以透明的抓取数据列表选择的单行数据,DataModel属性减了不必要的getQset。然而我在实际的使用中由于很多不定的情况Q大部分的用上又回到jsf标准的get方式?q种开发方式我认ؓseam的目的是惛_蔽与面不必要的关系l节Q让开发只需要重视真正的业务Q是一个标准的面向对象式结构,当jsf的体pȝ构的不断优化Q类DU开发方式我想会来有用?br /> <a href="mailto:4.@RequestParameter">4. @RequestParameter</a>是个很有用的注释Q它自动把当前属性和面同名的request提交值绑定在一P虽然q样使用q背了jsf所q求的面向对象化Qhttp透明化,但是实际开发中会后很多意想不到的情况,有时候在集成式页面这L做法会很有用Q当你的面中不仅仅有jsf标签清楚了Q?br /> <br /> seam的其他方面问题我会抽I整理一下,seam目前也是在不断更新当中,明年出台的webBeans规范的前w就是seamQ其实我更关注的是seam在整个j2ee体系中的角色Q它到底是想替代struts的applicationQ还是想替代spring的manager?也许有更多的xQ? <img src ="http://www.tkk7.com/fangshun/aggbug/154469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fangshun/" target="_blank">斚w</a> 2007-10-20 13:55 <a href="http://www.tkk7.com/fangshun/archive/2007/10/20/154469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用DataModelListener对‘jsf的dataTablelg自定义控制指定行样式的方?’的改进http://www.tkk7.com/fangshun/archive/2007/09/21/147143.html斚w斚wFri, 21 Sep 2007 08:28:00 GMThttp://www.tkk7.com/fangshun/archive/2007/09/21/147143.htmlhttp://www.tkk7.com/fangshun/comments/147143.htmlhttp://www.tkk7.com/fangshun/archive/2007/09/21/147143.html#Feedback2http://www.tkk7.com/fangshun/comments/commentRss/147143.htmlhttp://www.tkk7.com/fangshun/services/trackbacks/147143.html        ‘jsf的dataTablelg自定义控制指定行样式的方?/a>’  q篇文章我主要通过覆写DataModel对象的getRowData()Ҏ(gu)来控制DataTable每一行的行ؓQ其实还有个标准的方式,也更加优雅,那就是用DataModelListener,典型的监听事Ӟjsf内置了数据模型监听机制以便开发者对于数据模型每一行的控制Q而且q种监听可以无限增加Q得对每一行控制的方式变成一个个监听对象Q非常好用,下面是更改q得样例Q?br />      
package net.blogjava.fangshun.book;

import java.util.List;

import javax.faces.context.FacesContext;
import javax.faces.el.VariableResolver;
import javax.faces.model.DataModelEvent;
import javax.faces.model.DataModelListener;
import javax.faces.model.ListDataModel;

import org.apache.myfaces.component.html.ext.HtmlDataTable;

/**
 * 集成了ListDataModel为Book模型提供自定义样式的支持
 * 
@author shun.fang
 *
 
*/

public class BookListDataModel extends ListDataModel {
    
    
public BookListDataModel(List<Book> books) {
        
super(books);
        
super.addDataModelListener(new BookListDataModelListener());
    }

    
    
/**
     * 覆写了DataModel对象的getRowDataҎ(gu)Q每ơuiDatalg从模型列表获取新一行记?br />      * 的时候,是从q里发v的,所以在q里可以通过获取uiDatalgQ来对uiDatalg的状态进?br />      * 调整。目前的调整是Ҏ(gu)业务的需要对uiDatalg的每一行样式进行特D指定?br />      
*/

//    @Override
//    public Object getRowData() {
//        // TODO Auto-generated method stub
//        
//        /////////////////////////////////////////////////////////////
//        //通过变量解析获取request scope中的BookList列表模型
//        FacesContext facesContext = FacesContext.getCurrentInstance();
//        VariableResolver vr = facesContext.getApplication().getVariableResolver();
//        BookList bookList = (BookList)vr.resolveVariable(facesContext, "booking");    
//        /////////////////////////////////////////////////////////////
//        
//        //间接得到l定BookList列表模型的uiDatalgQƈ向下转型成HtmlDataTableQmyfaces扩展cdQ组?br /> //        HtmlDataTable table = (HtmlDataTable)bookList.getUiData();
//        
//        //获取当前行的Book实例
//        Book book = (Book)super.getRowData();
//        
//        //Ҏ(gu)当前行Book实例的业务特征ؓHtmlDataTablelg讄渲染行样?br /> //        setCurrentRowStyle(table, book.getType());
//        
//        return book;
//    }
    
    
/**
     * Ҏ(gu)不同的类型,讄当前行的样式
     * 
@param table
     * 
@param type
     
*/

    
private void setCurrentRowStyle(HtmlDataTable table, int type) {
        
switch (type) {
            
case Book.COMPUTER_BOOK:
                
//System.out.println("computers");
                table.setRowStyleClass("computers");    //讄计算Zc样?/span>
                break;
            
case Book.ART_BOOK:
                
//System.out.println("arts");
                table.setRowStyleClass("arts");        //讄文学书籍样式
                break;
            
case Book.ECONOMY_BOOK:
                
//System.out.println("C");
                table.setRowStyleClass("economy");        //讄l济书籍样式
                break;
            
default:
                
break;
        }

    }

    
    
class BookListDataModelListener implements DataModelListener {

        
public void rowSelected(DataModelEvent event) {
            
// TODO Auto-generated method stub
            
            
/////////////////////////////////////////////////////////////
            
//通过变量解析获取request scope中的BookList列表模型
            FacesContext facesContext = FacesContext.getCurrentInstance();
            VariableResolver vr 
= facesContext.getApplication().getVariableResolver();
            BookList bookList 
= (BookList)vr.resolveVariable(facesContext, "booking");    
            
/////////////////////////////////////////////////////////////
            
            
//间接得到l定BookList列表模型的uiDatalgQƈ向下转型成HtmlDataTableQmyfaces扩展cdQ组?/span>
            HtmlDataTable table = (HtmlDataTable)bookList.getUiData();
            
            
//获取当前行的Book实例
            Book book = (Book)event.getRowData();
            
if(book != null{
                
//Ҏ(gu)当前行Book实例的业务特征ؓHtmlDataTablelg讄渲染行样?/span>
                setCurrentRowStyle(table, book.getType());
            }

        }

        
    }

}

 我把监听器BookListDataModelListener作ؓ我的自定义模型的一个内部类来增Z务聚合性,大家在用的时候可以直接用一些标准的DataModelQ例如ListDataModel{,可以为每个监听器新徏一个对象,然后在jsf业务层去实例化调用,不一定要向样例那h在一赗但是一定要CQevent.getRowData()可能有空|最后一行的l结处)Q所以要向样例那Pq行非空判断Q?/p>

 



斚w 2007-09-21 16:28 发表评论
]]>
jsf的dataTablelg自定义控制指定行样式的方?/title><link>http://www.tkk7.com/fangshun/archive/2007/09/14/145156.html</link><dc:creator>斚w</dc:creator><author>斚w</author><pubDate>Fri, 14 Sep 2007 07:48:00 GMT</pubDate><guid>http://www.tkk7.com/fangshun/archive/2007/09/14/145156.html</guid><wfw:comment>http://www.tkk7.com/fangshun/comments/145156.html</wfw:comment><comments>http://www.tkk7.com/fangshun/archive/2007/09/14/145156.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/fangshun/comments/commentRss/145156.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fangshun/services/trackbacks/145156.html</trackback:ping><description><![CDATA[     摘要:      HtmlDataTablelg属于UIData家族的HTML数据列表实现Q组件中提供了rowStyleClass{方法来控制行的昄,Q如果你在rowStyleClass中加入两个样式类Qƈ使用逗号分开Q那么渲染的每一行会交替使用q两个样式类q行昄Q同理多个样式类也会循环交替昄。但是如果我x据业务的情况具体指定某行昄成特定的样式Q?..  <a href='http://www.tkk7.com/fangshun/archive/2007/09/14/145156.html'>阅读全文</a><img src ="http://www.tkk7.com/fangshun/aggbug/145156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fangshun/" target="_blank">斚w</a> 2007-09-14 15:48 <a href="http://www.tkk7.com/fangshun/archive/2007/09/14/145156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>׃n我在目中用jsf的一些经?/title><link>http://www.tkk7.com/fangshun/archive/2007/09/09/143737.html</link><dc:creator>斚w</dc:creator><author>斚w</author><pubDate>Sun, 09 Sep 2007 02:45:00 GMT</pubDate><guid>http://www.tkk7.com/fangshun/archive/2007/09/09/143737.html</guid><wfw:comment>http://www.tkk7.com/fangshun/comments/143737.html</wfw:comment><comments>http://www.tkk7.com/fangshun/archive/2007/09/09/143737.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.tkk7.com/fangshun/comments/commentRss/143737.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fangshun/services/trackbacks/143737.html</trackback:ping><description><![CDATA[<p>我目前的目前端使用的是jsf+seam的架构,目前目已经q入֣Q我x一些心得体会给大家说说Q以便大家在使用jsf的时候,走弯\?/p> <p>1.异常处理问题Q请为jsf加入seam框架Q看看Seam - 无缝集成JSFQ共三部分,里面告诉了你怎么在servlet容器下配合spring使用seamQseam不是一定要在ejb3和jboss下才可以使用。因为单独用jsf的话她的异常处理功能很简陋,跟踪不到你想看的地方Q对于开发很不方便,你只有打开日志才能看到问题所在,而seam在加入phase-listener以后Q对jsf不同的生命周期都q行了功能增强,即不用seamM的功能,她也能毫无保留的输出所有的异常栈?<br /> <br /> 2.css问题Q如果你惛_你的目中用jsfQcss太重要了Q很多刚开始用jsf的h都不是很习惯jsfZ块结构开发页面,因ؓjsf让你注意的是展现的内容,而不是展现的样式Q这是完全符合w3开发html的初P大家使用<table><tr><td>来做面展现布局Q其实是错误已久的方法,如果在jsf中能了解如何使用cssq行布局Qjsf不适合复杂面设计q句话就不攻自破了?<br /> <br /> 3.l心的用dataTablelgQ数据列表是最常用的页面组Ӟ但是我毫不留情的说jsf的dataTablelg的实现简直太滥了Q它?yu)是jsf开发一大祸栏V没有很方便的解决特定行样式昄的问题,没有解决回退按钮风险问题Q没有dataScroll和dataTablelgq行数据库分늚优雅办法Q数据提交的qd问题Q我的开发很多时间用在了dataTable的和其他lg块融合上面。不qjsf1.2通过l一elQ加入了对jstl的foreach标记的支持,我虽然还没有使用Q但是我认ؓq有可能成ؓ数据列表开发的一个有力补充?<br /> <br /> 4.把jsf的模型bean和后台的业务bean合二ZQ这样可以在前端提交面与模型绑定的同时Q完成业务bean的数据封装,q且交由服务层处理一气呵成。这样做有个好处Q就是我们会x设法通过各种手段在第一旉完成模型bean对业务bean的封装,消除服务层对dto的依赖。这h可行的,因ؓjsf的页面绑定机制提供了很好的帮助?<br /> <br /> 5.误虑多的使用convertlgQ比如列表页面有个radio块,提交radio值就是一个int数|然后在展现逻辑L复这个radio值对应的业务模型Q这样增加了展现逻辑处理面数据的负担,而且不好理Q如果把q个工作攑֜自定义的convert中,让convert在页面上昄int数|在提交上L对象Q那么页面和服务层就屏蔽了这L工作Q看到的都是对象的进出?/p> <p>6.我用了myfaces一个自qlg<t:updateListener>,是跨页面专递参敎ͼ非常好用Q刚使用jsf的朋友,可以看到跌{的下一个页面用它怎么做,但是传递模型对象,不要传递数|你用jsf是因ؓҎ(gu)Z对象考虑面设计的?/p> <p>7.心使用session来处理jsfQjsfq多的用了sessionQ但是我可以肯定一点,展现层一定是需要基于状态的方式来做的,q样可以化开发,无状态的方式会带来更多的无序代码。不是每个h都是高手。可以考虑使用seam的conversation来处理,她的长会话特别适合业务~辑Q默认的短会话会填补jsf有时Ҏ(gu)丢失的短期数据?/p> <p>8.调试jsf的问题:有时你用jsf想知道你的数据在哪个阶段变化了,你不会把jsf代码加入到自q工程中来调试把,请加入自定义的phaseListenerQ承phaseListenerq个接口Q你可以在把你的E序讄在Q何阶D蟩出来q行调试?/p> <p>9.分页的问题:在google搜一下,有个<a href="http://www.tkk7.com/steady/archive/2005/12/30/26013.aspx" target="blank">http://www.tkk7.com/steady/archive/2005/12/30/26013.aspx</a>提供了分늚方式Q我在使用,q是目前最可能的方式了把,呵呵Q不q要注意她dataTable的values直接使用了dataModelQ她与seam的@dataModel是不兼容的,所以不能用seam的@dataModel功能Q需要用get方式了?/p> <p>10.如果想用ajax4jsf{ajax框架Q你需要用faceletQ让面成ؓ标准的xhtmlQ记好了Q不要写了一大堆才发现这个问题?/p> <p>11.如果你在dataTable列表面使用了radio的话Q你q想在列表上做一些link操作Q一定要在操作上加入immediate=trueQ否则在没有选择radio的情况下Ҏ(gu)不会让你q去的。ƈ且列表中要用selectOneRadio,如果使用checkboxp使用selectBooleanCheckbox.lg?/p> <p>12.对于doGet的方式请使用seam?lt;s:link>lgQ?lt;%=request.getContextPath() %>问题Q提交引L书签问题都迎刃而解?/p> <p>13.如果你导入了其他面Q而没有用facelet的话Q那么导入的那个面p完全W合jsflg的渲染方式,混合html会解析不出来。反q来在主面应该量多用jsf标记与html混合的方式,q样可以使开发变得简单,管有时候jsf会很丢丑Q你试试每个htmllg都有个render属性就知道了。jsf1.2已经把؜合的html作ؓ一个outputlg来输出,可以和jsflg兼容Q是件好事。对于؜合htmlq种方式Q我惌你关注的是jsflg和模型的关系Q而不一定页面都得是jsflg标记?/p> <p>14.不要怿jsfq行的速度慢,jsf虽然在树形组件处理上Q每一个阶D都l历了递归遍历Q但是要怿jsf依然很快Q我现在的系l很快,如果你用后很慢那是目产生了问题,而不是框架的产生了问题?/p> <p>15.怿jsf一定是下一代表现层的王者,q很重要?/p> <p>p么多把,jsf的能多经验,我还在摸索当中,有机会还会和大家交流 <br /> fangshun1980@hotmail.com</p> <img src ="http://www.tkk7.com/fangshun/aggbug/143737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fangshun/" target="_blank">斚w</a> 2007-09-09 10:45 <a href="http://www.tkk7.com/fangshun/archive/2007/09/09/143737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://3688008.com" target="_blank">˳վɫwww</a>| <a href="http://zhaosifuwang.com" target="_blank">޹˾Ʒԭ</a>| <a href="http://kmp77.com" target="_blank">Ʒһ16 </a>| <a href="http://kelingdq.com" target="_blank">ˮƵwwwƵ</a>| <a href="http://sdsxyz.com" target="_blank">ަvþþ</a>| <a href="http://yaku100.com" target="_blank">ձXXXѿ</a>| <a href="http://zhuoyueyc.com" target="_blank">Ůžž</a>| <a href="http://83k5.com" target="_blank">77777_ҹþö</a>| <a href="http://jjv5.com" target="_blank">Ʒһ</a>| <a href="http://shaonvfushi.com" target="_blank">߹ۿѻվ</a>| <a href="http://pufenghotel.com" target="_blank">һ߹ۿվ</a>| <a href="http://wusongtv.com" target="_blank">ٸ</a>| <a href="http://777vip8.com" target="_blank">ѾƷԲ</a>| <a href="http://44jjy.com" target="_blank">9þѹƷػ</a>| <a href="http://jinmenonline.com" target="_blank">ۺɫĻ</a>| <a href="http://144446.com" target="_blank">˳ɾƷþþþ</a>| <a href="http://532342.com" target="_blank">߹ۿѳ</a>| <a href="http://321fafa.com" target="_blank">߹ۿƵ</a>| <a href="http://xhm33.com" target="_blank">AVӰ˵</a>| <a href="http://gzmsijz.com" target="_blank">˾žŴɫ㽶վ</a>| <a href="http://xzdlgp.com" target="_blank">һëƬѲ</a>| <a href="http://yimintech.com" target="_blank">1024Ѹùۿվ</a>| <a href="http://kypbuy.com" target="_blank">ŮƵѹۿվ </a>| <a href="http://mangshigas.com" target="_blank">ձ˳Ļ</a>| <a href="http://jdvgo.com" target="_blank">һ߹ۿ</a>| <a href="http://0595laser.com" target="_blank">ѵһƬվ</a>| <a href="http://k96d.com" target="_blank">5</a>| <a href="http://ding001.com" target="_blank">߹ۿ</a>| <a href="http://zhongxueping888.com" target="_blank">޳av߹ۿվ</a>| <a href="http://www96008.com" target="_blank">޸Ƶַ</a>| <a href="http://fennenll.com" target="_blank">þ޹ҹƷƬ</a>| <a href="http://njyadi.com" target="_blank">Ƶ߹ۿ</a>| <a href="http://www-474749.com" target="_blank">av벻߹ۿ </a>| <a href="http://86trader.com" target="_blank">ŮſȸͰƵ</a>| <a href="http://717795.com" target="_blank">99ƷƵѹۿ</a>| <a href="http://aqddv.com" target="_blank">йavƬ</a>| <a href="http://786087.com" target="_blank">ҹaëƬ</a>| <a href="http://hnmxld.com" target="_blank">ĻƷ </a>| <a href="http://rseav.com" target="_blank">avѵӰ</a>| <a href="http://junfurui.com" target="_blank">¾þþƷ</a>| <a href="http://6ork.com" target="_blank">պŷһ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>