﻿<?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-大鱼-随笔分类-JSF</title><link>http://www.blogjava.net/luluyanglu/category/38269.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 07 Jun 2011 09:28:05 GMT</lastBuildDate><pubDate>Tue, 07 Jun 2011 09:28:05 GMT</pubDate><ttl>60</ttl><item><title>JSF h:commandLink 添加确认对话框confirm</title><link>http://www.blogjava.net/luluyanglu/archive/2009/10/25/299707.html</link><dc:creator>大鱼</dc:creator><author>大鱼</author><pubDate>Sun, 25 Oct 2009 15:26:00 GMT</pubDate><guid>http://www.blogjava.net/luluyanglu/archive/2009/10/25/299707.html</guid><wfw:comment>http://www.blogjava.net/luluyanglu/comments/299707.html</wfw:comment><comments>http://www.blogjava.net/luluyanglu/archive/2009/10/25/299707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/luluyanglu/comments/commentRss/299707.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luluyanglu/services/trackbacks/299707.html</trackback:ping><description><![CDATA[<p>h:commandLink与h:commandButton都可以通过下面这种方式添加对话框</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Js代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://stenlylee.javaeye.com/blog/323060#"><img alt="复制代码" src="http://stenlylee.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-c">
    <li><span><span>onclick=</span><span class="string">"if(!comfirm('确认删除么？'))&nbsp;return&nbsp;false;"</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="js" style="display: none" name="code">onclick="if(!comfirm('确认删除么？')) return false;"
</pre>
<p>&nbsp;</p>
<p>同样的，RichFaces的a:commandLink与a:commandButton也是一样操作</p>
<p>&nbsp;</p>
<p>但是对于seam的s:link与s:button就不用，按照以前一样的方式</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Js代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://stenlylee.javaeye.com/blog/323060#"><img alt="复制代码" src="http://stenlylee.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-c">
    <li><span><span>onclick=</span><span class="string">"return&nbsp;confirm('确认删除？');"</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<img src ="http://www.blogjava.net/luluyanglu/aggbug/299707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luluyanglu/" target="_blank">大鱼</a> 2009-10-25 23:26 <a href="http://www.blogjava.net/luluyanglu/archive/2009/10/25/299707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF使用注意点</title><link>http://www.blogjava.net/luluyanglu/archive/2009/10/25/299702.html</link><dc:creator>大鱼</dc:creator><author>大鱼</author><pubDate>Sun, 25 Oct 2009 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/luluyanglu/archive/2009/10/25/299702.html</guid><wfw:comment>http://www.blogjava.net/luluyanglu/comments/299702.html</wfw:comment><comments>http://www.blogjava.net/luluyanglu/archive/2009/10/25/299702.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/luluyanglu/comments/commentRss/299702.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luluyanglu/services/trackbacks/299702.html</trackback:ping><description><![CDATA[<div align="left">JSF使用注意点<br />
<br />
1.转换时间时，必须加上时区GMT+8，不然相差一天。</div>
<div>&lt;f:convertDateTime&nbsp; timeZone="GMT+8" dateStyle="long" type="date"/&gt;</div>
<div>&nbsp;</div>
<div>2.&lt;h:outputText value="#{productBean.view}"/&gt;当view为空时，不显示。</div>
<div>&nbsp;</div>
<div>3.&nbsp;</div>
<div>actionListener在执行了action之后再执行。</div>
<div>&nbsp;</div>
<div>可以没有action，而只有actionListener。</div>
<div>&nbsp;</div>
<div>action可以设置成一个方法，也可以设置为一个导航用例的&lt;from-outcome&gt;</div>
<div>多个页面如果使用了同一个request级的backingBean，可能导致一些莫名其妙的问题。如：不能执行指定的Action.</div>
<div>&nbsp;</div>
<div>4.对于向managed-bean的属性注入request参数时，其&lt;managed-bean-scope&gt;必须为request,&lt;property-class&gt;不要为值类型(如果是值类型，当指定的request参数为空时，注入时会出错，因为一个空对象如Integer null不能自动转换为一个值类型如int的0)。如下所示：</div>
<div>&lt;managed-bean&gt;<br />
&nbsp; &nbsp;&lt;managed-bean-name&gt;productBean&lt;/managed-bean-name&gt;<br />
&nbsp; &nbsp;&lt;managed-bean-class&gt;demo.view.ProductBean&lt;/managed-bean-class&gt;<br />
&nbsp; &nbsp;&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;<br />
&nbsp; &nbsp;&lt;managed-property&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;property-name&gt;id&lt;/property-name&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;property-class&gt;java.lang.Integer&lt;/property-class&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;value&gt;#{param.id}&lt;/value&gt;<br />
&nbsp; &nbsp;&lt;/managed-property&gt;<br />
&nbsp; &nbsp;&lt;managed-property&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;property-name&gt;view&lt;/property-name&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;property-class&gt;java.lang.Boolean&lt;/property-class&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;value&gt;#{param.view}&lt;/value&gt;<br />
&nbsp; &nbsp;&lt;/managed-property&gt;<br />
&nbsp; &lt;/managed-bean&gt;</div>
<div>&nbsp;</div>
<div>5.对于以下查找是按部件id查找的，不是按参数名称查找的。</div>
<div>UIParameter uip =(UIParameter)event.getComponent().findComponent("productId");</div>
<div>//event是actionListener中的参数ActionEvent类型。</div>
<div>所以</div>
<div>&lt;h:commandLink action="view"&gt;</div>
<div>&lt;f:param&nbsp;id="productId" name="id" value="#{product.id}"/&gt;</div>
<div>&lt;/h:commandLink&gt;</div>
<div>&lt;f:prarm&gt;必须设置id</div>
<div>&nbsp;</div>
<div><font size="2">Map&nbsp;params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();<br />
String someValue = params.get("<font size="3">id</font>");</font> <br />
这个是按参数名称查找的</div>
<div>JSF标签只是JSF组件的外衣，Id就是组件的命名，与Delphi的组件名是一样的，之所以用Id不用Name,是为了与HTML中的一致（HTML input组件 id是其标识，name是其传递到服务器端的参数名。），所以查找JSF组件当然用Id了。</div>
<div>&nbsp;</div>
<div>6.当一个页面的BackingBean的构造函数中运行出错或属性注入出错时，表面上会报计算表达式错误，原因是这个BackingBean没有构造出来，为空，当然在Reader页面时会没有办法求相关的表达式的值。</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>7.request级的BackingBean在从客户端到服务端一次请求后，就被销毁。在这次请求中，只会被创建一次。在Forward之前创建的BackingBean在Forward之后，并不会被再次创建。</div>
<div>&nbsp;</div>
<div>8.判断是否是回传。</div>
<div>protected boolean isPostBack()<br />
&nbsp;{<br />
&nbsp;&nbsp;if (FacesContext.getCurrentInstance().getRenderResponse())<br />
&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;}</div>
<div>&nbsp;</div>
<div><strong></strong>&nbsp;</div>
<div><strong><span class="tpc_title">9.&lt;f:view&gt;里使用&lt;jsp:include&gt;时的注意事项</span> <br />
</strong><span class="tpc_content">感谢 tdwebber 提供。</span> </div>
<p>1) When using a jsp:include within the f:view tags, must include f:subview in the included file (or around the jsp:include tag).</p>
<p>当在f:view中使用jsp:include标签插入一个文件时，必须用f:subview把jsp:include包起来</p>
<p>2) In the include file, cannot have any HTML. All HTML tags must be wrapped in f:verbatim tags.</p>
<p>在被插入的文件中，不能有任何的html标签，如果必须使用html标签，必须用f:verbatim将它包起来。</p>
<p>3) Within main f:view tags however, it is not necessary to wrap everything in f:verbatim tags (it's not bad either). Just HTML that appears as children to other JSF components (i.e. t:newspaperTable). </p>
<p>在主f:view中，没有必要用f:verbatim将html标签包起来（当然包起来也可以）。当html标签出现在子视图或其它JSF部件标签中时，就要用f:verbatim包起来。</p>
<p>10.JSF的缓存能力好像太强了，有时停止了服务器，改动了jsp页面中的jsf标签，再启动服务器，但到该页面时，还是原来的内容，需要手动刷新一下。有时需要先转到别的页面，再回来刷新一下才能看到更新的内容。</p>
<img src ="http://www.blogjava.net/luluyanglu/aggbug/299702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luluyanglu/" target="_blank">大鱼</a> 2009-10-25 22:50 <a href="http://www.blogjava.net/luluyanglu/archive/2009/10/25/299702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF中commandLink与dataTable搭配不能正常工作的解决办法</title><link>http://www.blogjava.net/luluyanglu/archive/2009/10/15/298385.html</link><dc:creator>大鱼</dc:creator><author>大鱼</author><pubDate>Thu, 15 Oct 2009 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/luluyanglu/archive/2009/10/15/298385.html</guid><wfw:comment>http://www.blogjava.net/luluyanglu/comments/298385.html</wfw:comment><comments>http://www.blogjava.net/luluyanglu/archive/2009/10/15/298385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/luluyanglu/comments/commentRss/298385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luluyanglu/services/trackbacks/298385.html</trackback:ping><description><![CDATA[<p>1.&nbsp;&nbsp;&nbsp;&nbsp; 环境</p>
<p>Myfaces1.4 + tomahawk-1.1.3 + tomcat5.x + JDK5</p>
<p>下载：http://myfaces.apache.org</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp; 问题描述</p>
<p>假设场景，首先显示用户列表（用dataTable来实现列表显示），然后可以点击用户的名字导航到用户详细信息页面。</p>
<p>3.&nbsp;&nbsp;&nbsp;&nbsp; 尝试实现以及出现的问题</p>
<p>UserInfo.java</p>
<p>package com.wide.jsf.model;</p>
<p>&nbsp;</p>
<p>/**</p>
<p>&nbsp;* 用户信息</p>
<p>&nbsp;* </p>
<p>&nbsp;* @author cydooo</p>
<p>&nbsp;* </p>
<p>&nbsp;*/</p>
<p>public class UserInfo {</p>
<p>&nbsp;&nbsp;&nbsp; private Long userId;</p>
<p>&nbsp;&nbsp;&nbsp; private String username;</p>
<p>&nbsp;&nbsp;&nbsp; private String userdesc;</p>
<p>&nbsp;&nbsp;&nbsp; public UserInfo() {</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public UserInfo(Long userId, String username) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userId = userId;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.username = username;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public UserInfo(Long userId, String username, String userdesc) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this(userId, username);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userdesc = userdesc;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; //省略getter和setter</p>
<p>}<br />
&nbsp;</p>
<p><br />
UserInfoAction.java</p>
<p>package com.wide.jsf.web;</p>
<p>&nbsp;</p>
<p>import java.util.Arrays;</p>
<p>import java.util.List;</p>
<p>&nbsp;</p>
<p>import javax.faces.context.FacesContext;</p>
<p>&nbsp;</p>
<p>import com.wide.jsf.model.UserInfo;</p>
<p>&nbsp;</p>
<p>public class UserInfoAction {</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; /*</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; * 用于显示详细信息</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; */</p>
<p>&nbsp;&nbsp;&nbsp; private UserInfo userInfo;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; /*</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; * 用于显示用户列表</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; */</p>
<p>&nbsp;&nbsp;&nbsp; private List&lt;UserInfo&gt; userInfos;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public UserInfo getUserInfo() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userInfo;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public void setUserInfo(UserInfo userInfo) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userInfo = userInfo;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public List&lt;UserInfo&gt; getUserInfos() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userInfos;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public void setUserInfos(List&lt;UserInfo&gt; userInfos) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userInfos = userInfos;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public String listUser() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userInfos = Arrays.asList(new UserInfo[] { new UserInfo(1L, "Tom"),new UserInfo(2L, "John"), new UserInfo(3L, "Lily") });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "listUser";</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public String showDetail() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FacesContext context = FacesContext.getCurrentInstance();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Long userId = Long.parseLong((String) context.getExternalContext()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getRequestParameterMap().get("userId"));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("==&gt;" + userId);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (userId.intValue()) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userInfo = new UserInfo(1L, "Tom", "I am Tom");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userInfo = new UserInfo(2L, "John", "I am John");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 3:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userInfo = new UserInfo(3L, "Lily", "I am Lily");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "userdetail";</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}<br />
&nbsp;</p>
<p><br />
Backingbean和navigation的配置</p>
<p>&lt;managed-bean&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;managed-bean-name&gt;userInfoAction&lt;/managed-bean-name&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;managed-bean-class&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com.wide.jsf.web.UserInfoAction</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/managed-bean-class&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/managed-bean&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;navigation-rule&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from-view-id&gt;/listUser.jsp&lt;/from-view-id&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;navigation-case&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from-outcome&gt;userdetail&lt;/from-outcome&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to-view-id&gt;/userdetail.jsp&lt;/to-view-id&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/navigation-case&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/navigation-rule&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;navigation-rule&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from-view-id&gt;/userdetail.jsp&lt;/from-view-id&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/navigation-rule&gt;<br />
&nbsp;</p>
<p><br />
Jsp页面内容</p>
<p>A． listUser.jsp</p>
<p>&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;</p>
<p>&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;</p>
<p>&lt;%@ page contentType="text/html; UTF-8" pageEncoding="UTF-8"%&gt;</p>
<p>&nbsp;</p>
<p>&lt;f:view&gt;</p>
<p>&lt;html&gt;</p>
<p>&nbsp; &lt;head&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;title&gt;userlist&lt;/title&gt;</p>
<p>&nbsp; &lt;/head&gt;</p>
<p>&nbsp; </p>
<p>&nbsp; &lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;h:form&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:dataTable var="user" value="#{userInfoAction.userInfos}"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:column&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:commandLink value="#{user.username}" action="#{userInfoAction.showDetail}"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;f:param value="#{user.userId}" name="userId"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:commandLink&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:column&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:dataTable&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/h:form&gt;</p>
<p>&nbsp; &lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>&lt;/f:view&gt;<br />
&nbsp;</p>
<p><br />
B. userdetail.jsp</p>
<p>&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;</p>
<p>&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;</p>
<p>&lt;%@ page contentType="text/html; UTF-8" pageEncoding="UTF-8"%&gt;</p>
<p>&nbsp;</p>
<p>&lt;f:view&gt;</p>
<p>&lt;html&gt;</p>
<p>&nbsp; &lt;head&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;title&gt;userDetail&lt;/title&gt;</p>
<p>&nbsp; &lt;/head&gt;</p>
<p>&nbsp; </p>
<p>&nbsp; &lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;h:form&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;h:outputText value="#{userInfoAction.userInfo.userdesc}"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/h:form&gt;</p>
<p>&nbsp; &lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>&lt;/f:view&gt;<br />
&nbsp;</p>
<p><br />
编码结束，启动tomcat测试，进入userlist页面之后，我们可以看到用户列表，但点击用户查看详细信息的时候，发现并没有调用showDetail方法。</p>
<p>4.&nbsp;&nbsp;&nbsp;&nbsp; 解决办法</p>
<p>A．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;改为&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;。这是最简单的做法，改了之后重起Tomcat之后马上就看到效果了。但是很明显的使用session scope不好，比如这个例子，用户列表在当前seesion有效的情况下将一直保留，多窗口浏览器中也容易发生意想不到的问题。没有必要不要用session。</p>
<p>B．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将用户列表绑定到dataTable控件。</p>
<p>首先修改UserInfo类，让他实现Serializable接口，其他代码完全一样，实现Serializable接口是必须的，否则会抛出java.io.NotSerializableException异常。</p>
<p>public class UserInfo implements Serializable{&#8230;}<br />
&nbsp;</p>
<p><br />
UserInfoAction.java的修改</p>
<p>package com.wide.jsf.web;</p>
<p>&nbsp;</p>
<p>import java.util.Arrays;</p>
<p>import java.util.List;</p>
<p>&nbsp;</p>
<p>import javax.faces.component.html.HtmlDataTable;</p>
<p>import javax.faces.context.FacesContext;</p>
<p>&nbsp;</p>
<p>import com.wide.jsf.model.UserInfo;</p>
<p>&nbsp;</p>
<p>public class UserInfoAction {</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; /*</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; * 用于显示详细信息</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; */</p>
<p>&nbsp;&nbsp;&nbsp; private UserInfo userInfo;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; /*</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; * 绑定用户列表</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; */</p>
<p>&nbsp;&nbsp;&nbsp; private HtmlDataTable dataTable = new HtmlDataTable();</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; public UserInfo getUserInfo() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userInfo;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public void setUserInfo(UserInfo userInfo) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userInfo = userInfo;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public String listUser() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;UserInfo&gt; userInfos = Arrays.asList(new UserInfo[] { new UserInfo(1L, "Tom"),</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new UserInfo(2L, "John"), new UserInfo(3L, "Lily") });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataTable.setValue(userInfos);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "listUser";</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public String showDetail() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FacesContext context = FacesContext.getCurrentInstance();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Long userId = Long.parseLong((String) context.getExternalContext()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getRequestParameterMap().get("userId"));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("==&gt;" + userId);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (userId.intValue()) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userInfo = new UserInfo(1L, "Tom", "I am Tom");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userInfo = new UserInfo(2L, "John", "I am John");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 3:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userInfo = new UserInfo(3L, "Lily", "I am Lily");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "userdetail";</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public HtmlDataTable getDataTable() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return dataTable;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public void setDataTable(HtmlDataTable dataTable) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.dataTable = dataTable;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}<br />
&nbsp;</p>
<p><br />
listUser.jsp的修改</p>
<p>&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;</p>
<p>&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;</p>
<p>&lt;%@ page contentType="text/html; UTF-8" pageEncoding="UTF-8"%&gt;</p>
<p>&nbsp;</p>
<p>&lt;f:view&gt;</p>
<p>&lt;html&gt;</p>
<p>&nbsp; &lt;head&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;title&gt;userlist&lt;/title&gt;</p>
<p>&nbsp; &lt;/head&gt;</p>
<p>&nbsp; </p>
<p>&nbsp; &lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;h:form&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:dataTable var="user" binding="#{userInfoAction.dataTable}"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:column&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:commandLink value="#{user.username}" action="#{userInfoAction.showDetail}"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;f:param value="#{user.userId}" name="userId"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:commandLink&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:column&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:dataTable&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/h:form&gt;</p>
<p>&nbsp; &lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>&lt;/f:view&gt;<br />
&nbsp;</p>
<p><br />
重起Tomcat一切OK，不需要非得在session scope下了。</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/pengrg166/archive/2007/01/22/1490174.aspx</p>
<img src ="http://www.blogjava.net/luluyanglu/aggbug/298385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luluyanglu/" target="_blank">大鱼</a> 2009-10-15 14:28 <a href="http://www.blogjava.net/luluyanglu/archive/2009/10/15/298385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsf几个常用取值方法和技巧总结</title><link>http://www.blogjava.net/luluyanglu/archive/2009/03/17/260241.html</link><dc:creator>大鱼</dc:creator><author>大鱼</author><pubDate>Tue, 17 Mar 2009 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/luluyanglu/archive/2009/03/17/260241.html</guid><wfw:comment>http://www.blogjava.net/luluyanglu/comments/260241.html</wfw:comment><comments>http://www.blogjava.net/luluyanglu/archive/2009/03/17/260241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/luluyanglu/comments/commentRss/260241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luluyanglu/services/trackbacks/260241.html</trackback:ping><description><![CDATA[<table class="xfad" cellspacing="0" cellpadding="0" align="left" border="0">
    <tbody>
        <tr>
            <td><script src="/JS/wz300.js"></script></td>
        </tr>
    </tbody>
</table>
jsf几个常用取值方法和技巧总结(持续更新) <br />
<br />
1、获取managedbean或是解析表达式 <br />
有三种方法 <br />
<br />
(1) <br />
[code] <br />
FacesContext context =FacesContext.getCurrentInstance(); <br />
ValueBinding binding = <br />
context.getApplication().createValueBinding("#{bean}"); <br />
YourBean bean = (YourBean ) binding.getValue(context); <br />
[/code] <br />
<br />
(2) <br />
[code] <br />
FacesContext ctx = FacesContext.getCurrentInstance(); <br />
VariableResolver variableResolver =ctx.getApplication().getVariableResolver(); <br />
YourBean bean = (YourBean ) variableResolver.resolveVariable(ctx, "bean"); <br />
[/code] <br />
<br />
(3) <br />
[code] <br />
Application application=context.getApplication(); <br />
YourBean ManageBeanProperty=(YourBean )application.evaluateValueExpressionGet(context,"#{bean}",YourBean .class); <br />
[/code] <br />
<br />
第3种方法只对jsf1.2可用。（evaluateValueExpressionGet方法1.1种没有） <br />
其实还有一种方法。后面会提到。 <br />
<br />
<br />
2、对于已知范围和名字的bean，可以 <br />
externalContext.getRequestMap().get(beanName) <br />
externalContext.getSessionMap().get(beanName) <br />
externalContext.getApplicationMap().get(beanName) <br />
<br />
<br />
3、FacesContext <br />
组件实例相关 <br />
<br />
facesContext.getViewRoot() <br />
可以获取ViewRoot，然后递归循环其children得到整个组件树， <br />
可以实现： <br />
（1）根据组建id得到组件。 <br />
（2）得到form，添加新的组件到此集合，或是改变form的属性。 <br />
（3）得到某个类型的所有组件，然后加上监听器。 <br />
。。。。。 <br />
从这个root入手，再加上事件，绑定和分析，几乎可以完全控制整个组件树。 <br />
<br />
<br />
4、Application <br />
获取方式Application application=facesContext.getApplication(); <br />
用处可以见下面的代码： <br />
（1）组件类型的注册和组件集合的获取 <br />
（2）converter，validator的。。。 <br />
（3）属性分析器和变量分析器的。。。 <br />
（4）NavigationHandler、ViewHandler.... <br />
（5）添加一个listener <br />
（6）创建一个组件的实例 <br />
（7）创建一个值绑定或方法绑定 <br />
<br />
大部分全局性配置的东西都在这儿可以找到。而且几乎都是可以热替换的。 <br />
其中5、6比较常用。 <br />
<br />
<br />
5、RuntimeConfig <br />
获取方式RuntimeConfig runtimeConfig = RuntimeConfig.getCurrentInstance(); <br />
<br />
两个功能： <br />
（1）获取配置文件中所有的导航规则，或者运行时添加新的导航规则。 <br />
（2）获取配置文件中所有的managedmean类型，或者运行时添加一个新的managedmean类型。 <br />
<br />
第一条可以实现通过一个给定的url，动态添加一条规则，然后在action中return起outcome字符串。 <br />
后一条可以获取给定的bean的class全称，实例化一个bean。或者动态配置一个bean。 <br />
<br />
<br />
6、ExternalContext <br />
servlet相关操作和各种参数 <br />
（1）获取response和request、session、servletContext <br />
（2）redirect和dispacth <br />
（3）获取resquest、session、application、servlet参数 <br />
（4）获取资源和url本地路径 <br />
（5）encode url <br />
<br />
&nbsp;<br />
7、绑定List和Map <br />
使用JSF开发时，经常遇到要把MBean中的一个List或Map中的值通过EL显示在页面上，EL中访问Map或List的方法如下： <br />
<br />
假设FacesConfig中配置一个bean的MBean，它的类中定义了一个List类型的list属性和一个Map型的map属性。 <br />
<br />
首先是访问List，页面中引用bean中list属性的方法为：#{bean.list[index]} <br />
<br />
而对于Map，EL可以把Key作为一个属性来读取，因此对map的访问可以写为：#{bean.map.key}，当然这样可以解决基本的问题，但是如果map中的key是一个包含了空格或特殊字符的String，那么很明显，这个字符串不符合作为属性名的条件，那么用上面的方法去访问明显是有问题的，所以我们很可以用另外一种方法访问Map中的value，#{bean.map['key']}。同时可以看到，因为EL中的内建对象基本都是用Map实现的，因此，EL中的访问方法也是：#{sessionScope['key']}。 <br />
<br />
<br />
8、JSF动态为DataTable添加列 <br />
开发JSF的朋友可能会遇到这样的问题，如果DataTable的列不固定，需要动态生成， 该如何实现呢。 <br />
<br />
假设FacesConfig中配置一个名为bean的MBean，该MBean中需定义一个类型为javax.faces.component.html.HtmlDataTable类型的变量dt，页面中的DataTable设置bingding="#{bean.dt}"。 <br />
<br />
首先了解一下JSF中DataTable的渲染方式： <br />
<br />
DataTable <br />
<br />
--&lt;Header&gt; UIComponent <br />
<br />
--&lt;Children&gt;List&lt;HtmlColumn&gt; <br />
<br />
----&lt;HtmlColumn&gt; <br />
<br />
------&lt;Header&gt;UIComponent <br />
<br />
----&lt;Children&gt;List&lt;UIComponent&gt; <br />
<br />
因此，要在后台变更DataTable的状态，可以用dt.setHeader(UIComponent)设置DataTable的表头，然后可以往dt.getChildren()中添加HtmlColumn类型的列，同样，列中也可以由Header和Children组成。代码实现如下： <br />
<br />
private void initialReportTable(List&lt;ExcelReport&gt; reportList) ...{ <br />
dt.getChildren().clear(); <br />
for (ExcelReport report : reportList) ...{ <br />
HtmlColumn column = new HtmlColumn(); <br />
HtmlOutputText header = new HtmlOutputText(); <br />
header.setValueExpression("value", <br />
getValueExpression("#{rmaReport.captions.c" <br />
+ report.getPosition() + "}")); <br />
column.setHeader(header); <br />
<br />
HtmlOutputText value = new HtmlOutputText(); <br />
String ve = getVEString(report); <br />
System.out.println(report.getCaption() + " : " + ve); <br />
value.setValueExpression("value", getValueExpression(ve)); <br />
column.getChildren().add(value); <br />
<br />
dt.getChildren().add(column); <br />
} <br />
}其中，动态建立控件的方法为直接创建一个控件，然后通过ValueExpression来设置控件在运行时显示的值，如果是Column中的数据，则可以使用#{tableVar.ColumnName}格式的EL表达式。 <br />
<br />
9、 JSF动态生成组件 <br />
<br />
用过Servlet和JSP的开发者对动态生成组件应该是情有独钟了，可以根据数据的情况生成特定的组件，这样增大了Form的灵活性，那么JSF中如何生成动态的窗体呢，其实非常简单。主要逻辑就是通过FacesContext得到viewRoot对象，然后通过viewRoot对象的getChildren方法可以得到viewRoot下的所有第一级组件，然后分别对每个组件的getChildren方法进行递归调用，就可以得到整个组件树，当然可以对某个组件的getChildren得到的List使用add方法添加组件了，代码如下，页面有两个commandButton，其中一个可以添加一个TextBox控件，另外一个可以在console打印出当前的组件列表。 <br />
<br />
package net.moon; <br />
<br />
import java.util.List; <br />
<br />
import javax.faces.component.UIComponent; <br />
import javax.faces.component.UIViewRoot; <br />
import javax.faces.component.html.HtmlInputText; <br />
import javax.faces.context.FacesContext; <br />
<br />
public class DymaComponent ...{ <br />
<br />
private UIViewRoot viewRoot; <br />
private static int inputIndex = 0; <br />
<br />
private List&lt;UIComponent&gt; getComponentChildren(UIComponent component)...{ <br />
List&lt;UIComponent&gt; componentList = null; <br />
System.out.println(component.getId()); <br />
if(component.getChildCount() &gt; 0)...{ <br />
for(UIComponent ui : component.getChildren())...{ <br />
componentList = getComponentChildren(ui); <br />
} <br />
} <br />
return componentList; <br />
} <br />
<br />
public String getComponentsList()...{ <br />
viewRoot = FacesContext.getCurrentInstance().getViewRoot(); <br />
for(UIComponent component : viewRoot.getChildren())...{ <br />
getComponentChildren(component); <br />
} <br />
return null; <br />
} <br />
<br />
public String addTextBox()...{ <br />
viewRoot = FacesContext.getCurrentInstance().getViewRoot(); <br />
UIComponent form1 = viewRoot.getChildren().get(0); <br />
HtmlInputText input = new HtmlInputText(); <br />
input.setId("input" + (inputIndex++)); <br />
input.setValue("Input 1"); <br />
input.setRendered(true); <br />
form1.getChildren().add(input); <br />
return null; <br />
} <br />
<br />
} <br />
<br />
&lt;%...@ page contentType="text/html; charset=UTF-8" %&gt; <br />
&lt;%...@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %&gt; <br />
&lt;%...@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %&gt; <br />
<br />
&lt;html&gt; <br />
&lt;head&gt; <br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&gt; <br />
&lt;title&gt;&lt;/title&gt; <br />
&lt;/head&gt; <br />
&lt;body&gt; <br />
&lt;f:view&gt; <br />
&lt;h:form id="form1"&gt; <br />
&lt;h:commandButton id="commmand1" action="#{dymaComponent.getComponentsList}" value="Print ViewRoot"&gt;&lt;/h:commandButton&gt; <br />
&lt;h:commandButton action="#{dymaComponent.addTextBox}" value="Add TextBox"&gt;&lt;/h:commandButton&gt; <br />
&lt;/h:form&gt; <br />
&lt;/f:view&gt; <br />
&lt;/body&gt; <br />
&lt;/html&gt; <br />
<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt; <br />
<br />
&lt;faces-config <br />
xmlns="http://java.sun.com/xml/ns/javaee" <br />
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br />
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd" <br />
version="1.2"&gt; <br />
&lt;managed-bean&gt; <br />
&lt;managed-bean-name&gt; <br />
dymaComponent&lt;/managed-bean-name&gt; <br />
&lt;managed-bean-class&gt; <br />
net.moon.DymaComponent&lt;/managed-bean-class&gt; <br />
&lt;managed-bean-scope&gt; <br />
session&lt;/managed-bean-scope&gt; <br />
&lt;/managed-bean&gt; <br />
<br />
&lt;/faces-config&gt; 
<img src ="http://www.blogjava.net/luluyanglu/aggbug/260241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luluyanglu/" target="_blank">大鱼</a> 2009-03-17 14:17 <a href="http://www.blogjava.net/luluyanglu/archive/2009/03/17/260241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF表达式语言</title><link>http://www.blogjava.net/luluyanglu/archive/2009/03/17/260208.html</link><dc:creator>大鱼</dc:creator><author>大鱼</author><pubDate>Tue, 17 Mar 2009 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/luluyanglu/archive/2009/03/17/260208.html</guid><wfw:comment>http://www.blogjava.net/luluyanglu/comments/260208.html</wfw:comment><comments>http://www.blogjava.net/luluyanglu/archive/2009/03/17/260208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/luluyanglu/comments/commentRss/260208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luluyanglu/services/trackbacks/260208.html</trackback:ping><description><![CDATA[<div id="blogDetailDiv" style="font-size: 16px">JSF的表达式语言(EL)的形式跟jSP的表达式语言的形式类似：#{...}。EL的主要用途是使你可以引用和更新bean的属性，或者执行简单的语句，而不用写完整的Java代码。<br />
l JSF EL基于JSP 2.0中的表达式语言，<strong><wbr>它的用法几乎跟</strong><wbr><strong><wbr>JSP2.0</strong><wbr><strong><wbr>中的表达式语言一样</strong><wbr>，但二者仍有一些关键不同：<br />
l JSF使用(#)来标记表达式的开始，而JSP使用($)；<br />
l <strong><wbr>JSF</strong><wbr><strong><wbr>表达式是双向的。即它可以引用属性的值也可以更新之</strong><wbr>；<br />
l JSF EL也允许引用对象方法；<br />
l 某些JSP特定的特征无效，比如页面上下文范围(page)；<br />
l JSF EL表达式可以通过常规Java代码求解(结果是可以不需要JSP)；<br />
l JSF EL不官方支持函数。<br />
JSF EL也支持&#8220;.&#8221;和&#8220;[]&#8221;取值。它支持全范围的算术运算、逻辑运算与关系运算：<br />
<strong><wbr><font style="line-height: 1.5em" face="" size="5">1．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;算术运算有：</font><wbr></strong><wbr><br />
加法 (+), 减法 (-), 乘法 (*), 除法 (/ or div) 与余除 (% or mod) 。下面是算术运算的一些例子：<br />
表达式<br />
结果<br />
#{1} <br />
1 <br />
#{1 + 2} <br />
3 <br />
#{1.2 + 2.3} <br />
3.5 <br />
#{1.2E4 + 1.4} <br />
12001.4 <br />
#{-4 - 2} <br />
-6 <br />
#{21 * 2} <br />
42 <br />
#{3 / 4} <br />
0.75 <br />
#{3 div 4} <br />
0.75，除法<br />
#{3 / 0} <br />
Infinity <br />
#{10 % 4} <br />
2 <br />
#{10 mod 4} <br />
2，也是求模<br />
#{(1 == 2) ? 3 : 4} <br />
4 <br />
如同在Java语法一样 ( expression ? result1 : result2）是个三元运算，expression为true显示result1，false显示result2。<br />
<strong><wbr><font style="line-height: 1.5em" face="" size="5">2． 逻辑运算：</font><wbr></strong><wbr><br />
and(或&amp;&amp;)、or(或!!)、not(或!)。一些例子为：<br />
表达式<br />
结果<br />
#{true and false} <br />
false <br />
#{true or false} <br />
true <br />
#{not true} <br />
false <br />
<strong><wbr><font style="line-height: 1.5em" face="" size="5">3． 关系运算：</font><wbr></strong><wbr><br />
小于Less-than(&lt;、lt)、大于Greater-than (&gt;、gt)、小于或等于Less-than-or-equal(&lt;=、le)、大于或等于Greater-than-or-equal(&gt;=、ge)、等于Equal(==、eq)、不等于Not Equal(!=、ne)，由英文名称可以得到lt、gt等运算子之缩写词，以下是一些例子：<br />
表达式<br />
结果<br />
#{1 &lt; 2} <br />
true <br />
#{1 lt 2} <br />
true <br />
#{1 &gt; (4 / 2)} <br />
false <br />
#{1 &gt; (4 / 2)} <br />
false <br />
#{4.0 &gt;= 3} <br />
true <br />
#{4.0 ge 3} <br />
true <br />
#{4 &lt;= 3} <br />
false <br />
#{4 le 3} <br />
false <br />
#{100.0 == 100} <br />
true <br />
#{100.0 eq 100} <br />
true <br />
#{(10 * 10) != 100} <br />
false <br />
#{(10 * 10) ne 100} <br />
false <br />
关系运算也可以用来比较字符或字符串，按字典顺序来决定比较结果，例如：<br />
表达式<br />
结果<br />
#{'a' &lt; 'b'} <br />
true <br />
#{'hip' &gt; 'hit'} <br />
false <br />
#{'4' &gt; 3} <br />
true <br />
<strong><wbr><font style="line-height: 1.5em" face="" size="5">4． Empty：</font><wbr></strong><wbr><br />
用来测试空值(null、空字符串、数组、Map或者没有值的Collection)，如：<br />
表达式<br />
结果<br />
#{empty ''} <br />
true <br />
#{empty 'abcd'} <br />
false <br />
JSF EL能搜索Java Web应用的三个范围：application、session、request中以匹配特定关键字的对象。因为JSF一定要锁定到JSP，所以它不支持page范围。JSF EL支持的隐含变量有：cookie、header、headerValues、initParam、param、paramValues、applicationScope、sessionScope、requestScope、还有facesContext(当前请求的FacesContext实例)和view(当前视图)。</div>
<img id="paperPicArea1" style="display: none; position: relative" height="1" src="http://qzone.qq.com/ac/b.gif" width="1"  alt="" />
<img src ="http://www.blogjava.net/luluyanglu/aggbug/260208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luluyanglu/" target="_blank">大鱼</a> 2009-03-17 11:54 <a href="http://www.blogjava.net/luluyanglu/archive/2009/03/17/260208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>