﻿<?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-大道自然-随笔分类-JavaServer Faces</title><link>http://www.blogjava.net/iamlibo/category/33096.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 18 Jul 2008 08:37:35 GMT</lastBuildDate><pubDate>Fri, 18 Jul 2008 08:37:35 GMT</pubDate><ttl>60</ttl><item><title>Facelets组件</title><link>http://www.blogjava.net/iamlibo/archive/2008/07/18/215816.html</link><dc:creator>Libo</dc:creator><author>Libo</author><pubDate>Fri, 18 Jul 2008 07:22:00 GMT</pubDate><guid>http://www.blogjava.net/iamlibo/archive/2008/07/18/215816.html</guid><wfw:comment>http://www.blogjava.net/iamlibo/comments/215816.html</wfw:comment><comments>http://www.blogjava.net/iamlibo/archive/2008/07/18/215816.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/iamlibo/comments/commentRss/215816.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iamlibo/services/trackbacks/215816.html</trackback:ping><description><![CDATA[
<p>facelets 可以自定义组件，今天看了一下,果然好用。</p>
<p>以前使用facelets只是定义一个界面的模板，并不没有深入它的自定义组件方面的内容，其实它的自定义组件也就是定义一个tag，然后在xhtml中引入这个tag，但这要比普通的JSP方式的tag方便多了。</p>
<p>要想引用自定义的tag要在web.xml中加入下面代码(<span style="COLOR: #ff0000">前提是一定配置好其他的facelets内容</span>)</p>
<p>&lt;context-param&gt;<br/>&lt;param-name&gt;facelets.LIBRARIES&lt;/param-name&gt;<br/>&lt;param-value&gt;<br/>/WEB-INF/tld/xiangyun.taglib.xml<br/>&lt;/param-value&gt;<br/>&lt;/context-param&gt;<br/><br/>xiangyun.taglib.xml文件的内容如下：</p>
<p>&lt;?xml version="1.0"?&gt;<br/>&lt;!DOCTYPE facelet-taglib PUBLIC<br/>"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"<br/>"<a href="https://facelets.dev.java.net/source/browse/*checkout*/facelets/src/etc/facelet-taglib_1_0.dtd">https://facelets.dev.java.net/source/browse/*checkout*/facelets/src/etc/facelet-taglib_1_0.dtd</a>"&gt;</p>
<p>&lt;facelet-taglib&gt;<br/>&lt;namespace&gt;http://xiangyun.cn/components&lt;/namespace&gt;<br/>&lt;tag&gt;<br/>&lt;tag-name&gt;echo&lt;/tag-name&gt;<br/>&lt;source&gt;component.jspx&lt;/source&gt;<br/>&lt;/tag&gt;<br/>&lt;/facelet-taglib&gt;<br/></p>
<p>在这里引用了一个component.jspx文件，这个文件就是一个或一组想放在一块当做一个组件使用的内容，和其他的jspx文件的写法一样。内容如下：</p>
<p><br/>&lt;ui:composition xmlns:ui="<a href="http://java.sun.com/jsf/facelets">http://java.sun.com/jsf/facelets</a>"<br/>xmlns:ice="<a href="http://www.icesoft.com/icefaces/component">http://www.icesoft.com/icefaces/component</a>"<br/>xmlns:h="<a href="http://java.sun.com/jsf/html">http://java.sun.com/jsf/html</a>"<br/>xmlns:f="<a href="http://java.sun.com/jsf/core">http://java.sun.com/jsf/core</a>"&gt;<br/>&lt;ice:selectInputDate id="inputDate" popupDateFormat="MM/dd/yyyy"<br/>value="#{inputDate}" renderAsPopup="true"<br/>styleClass="iceSelInpDateInput" onkeydown="ctlent(event);"<br/>rendered="true"&gt;<br/>&lt;/ice:selectInputDate&gt;<br/>&lt;h:outputText value="#{inputDate}"<br/>rendered="true" styleClass="printText"&gt;<br/>&lt;f:convertDateTime dateStyle="long" type="date" timeZone="GMT+8"<br/>locale="cn" /&gt;<br/>&lt;/h:outputText&gt;<br/>&lt;/ui:composition&gt;</p>
<p>只需要注意&lt;ui:composition&gt;标签和引入的命名空间就行，标签里面的内容就看你要完成的功能了。在这里我使用了ICEfaces的日期组件，可以替换成JSF支技的任何东西。</p>
<p>接下来就是要使用了。</p>
<p>&lt;html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>"<br/>xmlns:ui="<a href="http://java.sun.com/jsf/facelets">http://java.sun.com/jsf/facelets</a>"<br/>xmlns:ald="<a href="http://xiangyun.cn/components">http://xiangyun.cn/components</a>"&gt;<br/>&lt;ui:composition template="/pages/layout/layout.jspx"&gt;<br/>&lt;ui:define name="content"&gt;<br/>&lt;h:form id="testForm"&gt;<br/>&lt;ald:echo inputDate="#{testBean.date}"/&gt;<br/>&lt;/h:form&gt;<br/>&lt;/ui:define&gt;<br/>&lt;/ui:composition&gt;<br/>&lt;/html&gt;<br/></p>
<p>这里需要引入命名空间，定义前缀为ald，</p>
<p>&lt;ald:echo&gt;这个标签名同xiangyun.taglib.xml中声明的要一致，inputDate是在定义组件component.jspx中声明的#{inputDate}，它可以接收EL表达式。</p>
<p>这样我们就可以把大的复杂的页面，分成可以重用的组件了。</p>
<p>有问题可以和我联系：<a href="mailto:wfn_libo@163.com">wfn_libo@163.com</a></p>
<p>也可以参考<a href="https://facelets.dev.java.net/nonav/docs/dev/docbook.html#gettingstarted-bean">https://facelets.dev.java.net/nonav/docs/dev/docbook.html#gettingstarted-bean</a></p>
<p class="zoundry_bw_tags">
  <!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
  <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/facelets" class="ztag" rel="tag">facelets</a>, <a href="http://technorati.com/tag/jsf" class="ztag" rel="tag">jsf</a></span> 
</p><img src ="http://www.blogjava.net/iamlibo/aggbug/215816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iamlibo/" target="_blank">Libo</a> 2008-07-18 15:22 <a href="http://www.blogjava.net/iamlibo/archive/2008/07/18/215816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF 动态创建组件</title><link>http://www.blogjava.net/iamlibo/archive/2008/07/01/212007.html</link><dc:creator>Libo</dc:creator><author>Libo</author><pubDate>Tue, 01 Jul 2008 13:39:00 GMT</pubDate><guid>http://www.blogjava.net/iamlibo/archive/2008/07/01/212007.html</guid><wfw:comment>http://www.blogjava.net/iamlibo/comments/212007.html</wfw:comment><comments>http://www.blogjava.net/iamlibo/archive/2008/07/01/212007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iamlibo/comments/commentRss/212007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iamlibo/services/trackbacks/212007.html</trackback:ping><description><![CDATA[
<p>JSF 的组件和组件树的概念非常好,可以完全通过JAVA代码实现的组件的生成与设置方法等操作.尤其是JSF1.2提供了更多的组件的Binding方法.下面就实际做一个例子.</p>
<p>首先在managedBean中创建组件</p>
<p>1、创建按钮</p>
<p>private HtmlCommandButton button = new HtmlCommandButton();</p>
<p>public HtmlCommandButton getButton() {<br/>button.setValue("button"); //设置按钮上显示的值<br/>FacesContext context = FacesContext.getCurrentInstance();<br/>ELContext elContext = context.getELContext();<br/>ExpressionFactory ef = context.getApplication().getExpressionFactory();<br/>Class[] c = new Class[0];<br/>// c[0] = ActionEvent.class; //此处想调用一个带参数的方法,没有成功<br/>MethodExpression me = ef.createMethodExpression(elContext,<br/>"#{testBean.testEl}", Void.TYPE, c);<br/>button.setActionExpression(me); //为钮加入一个响应的方法,这种方法是JSF1.2方式的</p>
<p>return button;<br/>}</p>
<p>//在运行时被调用的方式,同前面的方法绑定中的EL表达是一致的.</p>
<p>public void testEl() {<br/>System.out.println("testEl method is run no param");<br/>}</p>
<p>在JSP页面中加入按钮.(testBean是在FacesConfig.xml中声明的上的bean)</p>
<p>&lt;h:commandButton binding="#{testBean.button }"/&gt;</p>
<p>2、创建表格<br/>private HtmlPanelGrid grid = new HtmlPanelGrid();<br/></p>
<p>public HtmlPanelGrid getGrid() {<br/>List list = grid.getChildren();//取得表格的列表<br/>list.add(getHtmlInputText());//向表格列表加入组件<br/>System.out.println("grid column " + grid.getColumns());<br/>return grid;<br/>}</p>
<p>public HtmlInputText getHtmlInputText() {<br/>htmlInputText.setValue("abcc");//这里直接设置值了，可以通过expressionFactory.createValueExpression(elContext, "#{testBean.userid}", String.class);来设置值表达式</p>
<p>htmlInputText.setAlt("alt htmlInputText ");<br/>htmlInputText.setConverter(new TestConve());//为输入框设置转换器<br/>return htmlInputText;<br/>}<br/></p>
<p>在JSP中加入下面代码:</p>
<p>&lt;h:panelGrid binding="#{testBean.grid }"/&gt;</p>
<p>就可以在表格内显示一个输入框了。</p>
<p><br/></p>
<p class="zoundry_bw_tags">
  <!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
  <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/jsf" class="ztag" rel="tag">jsf</a>, <a href="http://technorati.com/tag/%E5%8A%A8%E6%80%81%E7%BB%84%E4%BB%B6" class="ztag" rel="tag">动态组件</a></span> 
</p><img src ="http://www.blogjava.net/iamlibo/aggbug/212007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iamlibo/" target="_blank">Libo</a> 2008-07-01 21:39 <a href="http://www.blogjava.net/iamlibo/archive/2008/07/01/212007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FacesContext的一点经验</title><link>http://www.blogjava.net/iamlibo/archive/2008/04/26/196353.html</link><dc:creator>Libo</dc:creator><author>Libo</author><pubDate>Sat, 26 Apr 2008 13:11:00 GMT</pubDate><guid>http://www.blogjava.net/iamlibo/archive/2008/04/26/196353.html</guid><wfw:comment>http://www.blogjava.net/iamlibo/comments/196353.html</wfw:comment><comments>http://www.blogjava.net/iamlibo/archive/2008/04/26/196353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iamlibo/comments/commentRss/196353.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iamlibo/services/trackbacks/196353.html</trackback:ping><description><![CDATA[
<p>JSF 的FacesContext 在使用中遇到这样的一个问题，就是向FacesContext中加入的FacesMessages只有第一次能够显示出来，第二次没有办法显示。经多次试验，最终发现是我自己在基类中写的getFacesContext()方法有问题。</p>
<p>我是这样写的:</p>
<p>private FacesContext facesContext;<br/>public FacesContext getFacesContext() {<br/>if (this.facesContext==null)<br/>this.facesContext =FacesContext.getCurrentInstance();<br/>return FacesContext.getCurrentInstance();<br/>}<br/>然后在子类中直接调用这个方法就可以得到FacesContext了。</p>
<p>想法是好的，但是并没有仔细了解FacesContext的实现。</p>
<p>其实FacesContext.getCurrentInstance()就已经能够每调用的时候都在上下广得到同一个实例了。不必再象我这样写了。反而会画蛇添足。</p>
<p>改成这样就可以了。</p>
<p><br/>public FacesContext getFacesContext() {<br/>return FacesContext.getCurrentInstance();<br/>}<br/></p>
<br/><p class="zoundry_bw_tags">
  <!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
  <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/facesContext" class="ztag" rel="tag">facesContext</a></span> 
</p><img src ="http://www.blogjava.net/iamlibo/aggbug/196353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iamlibo/" target="_blank">Libo</a> 2008-04-26 21:11 <a href="http://www.blogjava.net/iamlibo/archive/2008/04/26/196353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>icefaces使用经验_ice:panelPopup</title><link>http://www.blogjava.net/iamlibo/archive/2007/09/05/142803.html</link><dc:creator>Libo</dc:creator><author>Libo</author><pubDate>Wed, 05 Sep 2007 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/iamlibo/archive/2007/09/05/142803.html</guid><wfw:comment>http://www.blogjava.net/iamlibo/comments/142803.html</wfw:comment><comments>http://www.blogjava.net/iamlibo/archive/2007/09/05/142803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iamlibo/comments/commentRss/142803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iamlibo/services/trackbacks/142803.html</trackback:ping><description><![CDATA[<p>ice:panelPopup是icefaces组件中模式(modal)对话框的组件.使用起来也非常简单.</p>
<p>先看代码:</p>
<p>&lt;ice:panelPopup id="affirmDel" rendered="true" visible="#{purchasePlanBean.confirmDel}" modal="true"<br />
style="z-index:1001; width: 350px; height: 200px; top:25%; left:25%;"&gt;<br />
&lt;f:facet name="header"&gt;<br />
&lt;ice:outputText styleClass="popupTitle" value="#{resource.confirm_title }" /&gt;<br />
&lt;/f:facet&gt;<br />
&lt;f:facet name="body"&gt;</p>
<p>这里是body的内容</p>
<p>&lt;/f:facet&gt;<br />
&lt;/ice:panelPopup&gt;<br />
</p>
<p>visible属性:是表示什么时候显示该对话框,一般是bean中的一个boolean变量的值，然后通过其他按钮的动作改变这个变量的值来显示对话框。</p>
<p>modal属性：表示对话框是否模式显示。</p>
<p>&lt;f:facet name="header"&gt;&lt;/f:facet&gt;中的内容是对话框的标题</p>
<p>&lt;f:facet name="body"&gt;&lt;/f:facet&gt;中的内容是对话框的显示内容。可以为JSF允许的任何内容。</p>
<p>如果对话的body的内容需要一个form，这时应该把一个form标签放到body内部。而不是放到&lt;ice:panelPopup&gt;这个标签的外部。如果放到外部在有多少个form 的情况下会出现对话框都被遮盖起来的情况，导致页面不能使用了。</p>
<p class="zoundry_bw_tags">
<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
<span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/icefaces" class="ztag" rel="tag">icefaces</a>, <a href="http://technorati.com/tag/jsf" class="ztag" rel="tag">jsf</a></span>
</p>
<img src ="http://www.blogjava.net/iamlibo/aggbug/142803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iamlibo/" target="_blank">Libo</a> 2007-09-05 09:50 <a href="http://www.blogjava.net/iamlibo/archive/2007/09/05/142803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>