﻿<?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-xiaosilent's Blog-随笔分类-Java相关</title><link>http://www.blogjava.net/xiaosilent/category/18264.html</link><description>Waste of time is the most extravagant and costly of all expenses.&lt;BR&gt;&lt;BR&gt;&lt;a href="mailto:xiaosilent@gmail.com"&gt;&lt;img src="http://www.blogjava.net/images/blogjava_net/xiaosilent/16063/o_mail.png" title="Contact me via xiaosilent@gmail.com" alt="xiaosilent@gmail.com"&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 21 Apr 2008 19:45:09 GMT</lastBuildDate><pubDate>Mon, 21 Apr 2008 19:45:09 GMT</pubDate><ttl>60</ttl><item><title>MyEclipse 6.0.1 注册码生成类</title><link>http://www.blogjava.net/xiaosilent/archive/2008/04/21/194650.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Mon, 21 Apr 2008 15:33:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2008/04/21/194650.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/194650.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2008/04/21/194650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/194650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/194650.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 安装MyEclipse插件的时候，在网上找的， 仅供学习参考&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaosilent/archive/2008/04/21/194650.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaosilent/aggbug/194650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2008-04-21 23:33 <a href="http://www.blogjava.net/xiaosilent/archive/2008/04/21/194650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu 8.04 Eclipse MyEclipse 出现的问题小记</title><link>http://www.blogjava.net/xiaosilent/archive/2008/04/21/194559.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Mon, 21 Apr 2008 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2008/04/21/194559.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/194559.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2008/04/21/194559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/194559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/194559.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 回到Ubuntu，安装Java开发环境时遇到的一些小问题~~&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaosilent/archive/2008/04/21/194559.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaosilent/aggbug/194559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2008-04-21 17:38 <a href="http://www.blogjava.net/xiaosilent/archive/2008/04/21/194559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Ubuntu安装Subversion</title><link>http://www.blogjava.net/xiaosilent/archive/2008/04/12/192308.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Fri, 11 Apr 2008 23:19:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2008/04/12/192308.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/192308.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2008/04/12/192308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/192308.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/192308.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 简要记录在ubuntu上配置subversion的过程&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaosilent/archive/2008/04/12/192308.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaosilent/aggbug/192308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2008-04-12 07:19 <a href="http://www.blogjava.net/xiaosilent/archive/2008/04/12/192308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse导出JavaDoc中文乱码问题解决</title><link>http://www.blogjava.net/xiaosilent/archive/2007/11/28/163646.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Wed, 28 Nov 2007 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2007/11/28/163646.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/163646.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2007/11/28/163646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/163646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/163646.html</trackback:ping><description><![CDATA[
		<p>给 javadoc.exe 加上编码参数就OK。<br /><br />具体的：<br /><br />在Eclipse里 export 选 JavaDoc，在向导的最后一页的Extra JavaDoc Options 里填上参数即可<br /><br />比如项目采用的是UTF－8的编码就填：-encoding UTF-8 -charset UTF-8<br /><br /><img height="603" alt="o_javadoc.JPG" src="http://www.blogjava.net/images/blogjava_net/xiaosilent/17120/o_javadoc.JPG" width="542" border="0" /></p>
<img src ="http://www.blogjava.net/xiaosilent/aggbug/163646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2007-11-28 11:20 <a href="http://www.blogjava.net/xiaosilent/archive/2007/11/28/163646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>响叮当 医药管理系统</title><link>http://www.blogjava.net/xiaosilent/archive/2007/08/10/135922.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Fri, 10 Aug 2007 11:30:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2007/08/10/135922.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/135922.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2007/08/10/135922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/135922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/135922.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 响叮当医药管理系统，是一款用Java语言开发的桌面软件，她将帮助你完成药店药品、财务管理工作。 她朴实简洁，是中小型药品零售、批发企业的理想管理软件。&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaosilent/archive/2007/08/10/135922.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaosilent/aggbug/135922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2007-08-10 19:30 <a href="http://www.blogjava.net/xiaosilent/archive/2007/08/10/135922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改 dTree , 实现节点的动态添加</title><link>http://www.blogjava.net/xiaosilent/archive/2007/04/28/114394.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Sat, 28 Apr 2007 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2007/04/28/114394.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/114394.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2007/04/28/114394.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/114394.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/114394.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: dTree原来是不支持ajax方式动态添加节点的，经过我的小改动，可通过调用 dTree.getChildren(parentID) 方法来动态添加节点。&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaosilent/archive/2007/04/28/114394.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaosilent/aggbug/114394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2007-04-28 16:54 <a href="http://www.blogjava.net/xiaosilent/archive/2007/04/28/114394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL和Java交互的中文乱码</title><link>http://www.blogjava.net/xiaosilent/archive/2007/01/17/94496.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Wed, 17 Jan 2007 12:55:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2007/01/17/94496.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/94496.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2007/01/17/94496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/94496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/94496.html</trackback:ping><description><![CDATA[
		<p>数据库的乱码问题，一直都相当恼人，不过，要解决起来，其实也还是比较容易……<br /><br />首先，需要设定数据库的编码，也就是要在数据库连接字串里面设置好编码：<br />url=jdbc:mysql://localhost:3306/databaseName?useUnicode=true&amp;characterEncoding=UTF-8<br />在建立数据库连接的时候，再指定用户名和密码就可以了。<br /><br />随后，需要在数据库和数据表里都设定好编码：<br />CREATE DATABASE `db` /*!40100 DEFAULT CHARACTER SET utf8 */;<br />USE `db`;</p>
		<p>CREATE TABLE `user` (<br />  `id` int(11) NOT NULL auto_increment,<br />   `username` char(20) default NULL COMMENT '用户名',<br />   `password` char(20) default NULL COMMENT '密码',<br />  PRIMARY KEY  (`id`)<br />) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;<br /><br /><br /><br />最后是设定JSP文件的编码，<br />request.setCharacterEncoding("UTF-8");<br />response.setCharacterEncoding("UTF-8");<br /></p>
		<p>或者是用个Filter:</p>
		<p>
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> java.io.IOException;<br /><br /></span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> javax.servlet.Filter;<br /></span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> javax.servlet.FilterChain;<br /></span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> javax.servlet.FilterConfig;<br /></span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> javax.servlet.ServletException;<br /></span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> javax.servlet.ServletRequest;<br /></span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> javax.servlet.ServletResponse;<br /><br /></span>
				<span style="color: rgb(0, 128, 0);">/**</span>
				<span style="color: rgb(0, 128, 0);">
						<br /> * 字符编码过滤器<br /> * <br /> * </span>
				<span style="color: rgb(128, 128, 128);">@author</span>
				<span style="color: rgb(0, 128, 0);"> xiaosilent.<br /> * <br /> </span>
				<span style="color: rgb(0, 128, 0);">*/</span>
				<span style="color: rgb(0, 0, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">class</span>
				<span style="color: rgb(0, 0, 0);"> CharacterEncodingFilter </span>
				<span style="color: rgb(0, 0, 255);">implements</span>
				<span style="color: rgb(0, 0, 0);"> Filter {<br /><br />    </span>
				<span style="color: rgb(0, 0, 255);">protected</span>
				<span style="color: rgb(0, 0, 0);"> FilterConfig filterConfig;<br /><br />    </span>
				<span style="color: rgb(0, 0, 255);">private</span>
				<span style="color: rgb(0, 0, 0);"> String targetEncoding </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">UTF-8</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">;<br /><br />    </span>
				<span style="color: rgb(0, 128, 0);">/**</span>
				<span style="color: rgb(0, 128, 0);">
						<br />     * 初始化过滤器,获取初始化参数,如果没有设定则使用默认的UTF-8编码.<br />     </span>
				<span style="color: rgb(0, 128, 0);">*/</span>
				<span style="color: rgb(0, 0, 0);">
						<br />    </span>
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> init(FilterConfig config) </span>
				<span style="color: rgb(0, 0, 255);">throws</span>
				<span style="color: rgb(0, 0, 0);"> ServletException {<br /><br />        </span>
				<span style="color: rgb(0, 0, 255);">this</span>
				<span style="color: rgb(0, 0, 0);">.filterConfig </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> config;<br /><br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> 如果在web.xml里定义了编码,则获取,否则使用默认的UTF-8.</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (config.getInitParameter(</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">encoding</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">) </span>
				<span style="color: rgb(0, 0, 0);">!=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">) {<br /><br />            </span>
				<span style="color: rgb(0, 0, 255);">this</span>
				<span style="color: rgb(0, 0, 0);">.targetEncoding </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> config.getInitParameter(</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">encoding</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">);<br />        }<br /><br />    }<br /><br />    </span>
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> doFilter(ServletRequest request, ServletResponse response,<br />            FilterChain chain) </span>
				<span style="color: rgb(0, 0, 255);">throws</span>
				<span style="color: rgb(0, 0, 0);"> IOException, ServletException {<br /><br />        request.setCharacterEncoding(targetEncoding);<br />        response.setCharacterEncoding(targetEncoding);<br /><br />        chain.doFilter(request, response);<br /><br />    }<br /><br />    </span>
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> destroy() {<br /><br />        filterConfig </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">;<br /><br />    }<br /><br />}<br /></span>
		</div>在web.xml里加入:  &lt;filter&gt;<br />      &lt;filter-name&gt;CharacterEncodingFilter&lt;/filter-name&gt;<br />      &lt;filter-class&gt;xiao.cms.filter.CharacterEncodingFilter&lt;/filter-class&gt;<br />  &lt;/filter&gt;<br />  &lt;filter-mapping&gt;<br />      &lt;filter-name&gt;CharacterEncodingFilter&lt;/filter-name&gt;<br />      &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />  &lt;/filter-mapping&gt;<br />这里使用的是UTF-8,所以没有指定参数,如果用非UTF-8编码,指定一个名为encoding的参数即可.<br /><p><br /></p><p>经过这样三个步骤，就不存在乱码问题了。<br /><br />另，不推荐用 MySQL-Front 这个客户端程序管理UTF-8编码的数据库。如果是GBK编码还可以考虑，UTF-8则会出现编码问题，导致程序不能正常工作，强烈推荐 Navicat 。 功能强大，默认使用UTF-8编码，界面友好、美观。</p><img src ="http://www.blogjava.net/xiaosilent/aggbug/94496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2007-01-17 20:55 <a href="http://www.blogjava.net/xiaosilent/archive/2007/01/17/94496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Properties读取任意目录的配置文件</title><link>http://www.blogjava.net/xiaosilent/archive/2006/12/22/89575.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Fri, 22 Dec 2006 10:50:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2006/12/22/89575.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/89575.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2006/12/22/89575.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/89575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/89575.html</trackback:ping><description><![CDATA[看到很多用getResourcesAsStream()来读取.properties文件，但是对.properties文件的路径有要求，至少要和包的根目录在同一目录，对于这点，我也是迷糊了好久，就是没有想通，咋个getResourcesAsStream("/var/config.properties") 会返回null，明明文件是在的，就是因为这里的“根目录” 和通常讲的根目录还不一样。<br />然而，一般，我喜欢把web的配置文件放到WEB-INF里，和web.xml 文件放在一起，如果用getResourcesAsStream()肯定是不行了。<br />仔细想了一下，找到一个变通的方法：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">{<br />            <br />            String url </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.getClass().getResource(</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">).getPath().replaceAll(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%20</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />            String path </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> url.substring(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">, url.indexOf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">WEB-INF</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)) </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">WEB-INF/config.properties</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />            Properties config </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Properties();<br />            config.load(new FileInputStream(path));</span><span style="color: rgb(0, 0, 0);"><br />            System.out.println(config.getProperty(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">dbDriver</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));<br />        }<br />        </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">(Exception e){<br />            e.printStackTrace();<br />        }</span></div><br />这样，就可以把配置文件放到任意位置了~~~~<br /><img src ="http://www.blogjava.net/xiaosilent/aggbug/89575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2006-12-22 18:50 <a href="http://www.blogjava.net/xiaosilent/archive/2006/12/22/89575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu/Debian 下 Java中文支持问题</title><link>http://www.blogjava.net/xiaosilent/archive/2006/12/10/86658.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Sun, 10 Dec 2006 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2006/12/10/86658.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/86658.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2006/12/10/86658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/86658.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/86658.html</trackback:ping><description><![CDATA[终于碰到java的中文问题了，该是中文的地方出现的是一些个豆腐块，完全不知所云。<br />虽然在 wiki.ubuntu.org.cn 上的快速设置指南里有提到 java中文问题的解决办法，但是，于我来说，我只需要能够显示中文就可以了，就不需要搞得那么复杂了。<br />还是在论坛里搜索了一下，找到一个相对来说，估计是最简单的解决方法了。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(128, 0, 0);">cd JAVA_HOME/jre/lib/fonts<br />sudo mkdir fallback<br />sudo ln -s /usr/share/fonts/zh_CN/simsun.ttc .<br />sudo mkfontdir<br />sudo mkfontscale</span></div><br />其中，JAVA_HOME代表的是jdk的安装目录，我是自己编译安装的sun的jdk，安装目录就是/usr/lib/j2sdk1.5-sun。 /usr/share/fonts/zh_CN/simsun.ttc 是我的宋体文件存放路径，根据实际情况修改就是了。 只是，要注意的是，所使用的字体文件一定是要能够支持中文的字体，否则，这一切都是白搭。<br /><img src ="http://www.blogjava.net/xiaosilent/aggbug/86658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2006-12-10 11:57 <a href="http://www.blogjava.net/xiaosilent/archive/2006/12/10/86658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu下如何快速搭建JSF平台</title><link>http://www.blogjava.net/xiaosilent/archive/2006/11/15/build_a_JSF_develop_environment_on_Ubuntu.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Wed, 15 Nov 2006 09:20:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2006/11/15/build_a_JSF_develop_environment_on_Ubuntu.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/81327.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2006/11/15/build_a_JSF_develop_environment_on_Ubuntu.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/81327.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/81327.html</trackback:ping><description><![CDATA[首先，当然是要建立Java环境了。<br /><br />在这里，我们使用自己编译sun的J2SDK安装包的方式进行安装。<br />从sun下载最新的J2SDK安装包，因为，是Ubuntu操作系统，所以，要选择linux平台下的jdk安装包进行下载，得到文件jdk-1_5_0_06-linux-i586.bin。现在可以直接给.bin文件加上可执行权限，然后在终端下运行安装程序，这里，我们要把它编译成.deb包的形式再来安装。 <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">sudo apt-get install java-package java-common fakeroot </span></div>安装上编译需要的三个包。然后在终端下执行 <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">fakeroot make-jpkg jdk-1_5_0_</span><span style="color: rgb(0, 0, 0);">06</span><span style="color: rgb(0, 0, 0);">-linux-i586.bin</span></div> ，就会在当前目录下生成一个名为sun-j2sdk1.5_1.5.0+update06_i386.deb的文件。这就是已经编译好的jdk包了，然后是安装，执行 <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">sudo dpkg -i sun-j2sdk1.5_</span><span style="color: rgb(0, 0, 0);">1.5.0</span><span style="color: rgb(0, 0, 0);">+update06_i386.deb</span></div> 就可以安装了(当然也可以直接双击.deb文件进行安装)。 现在虽然安装好了jdk，但是系统并没有把jdk当成是默认的java解释器(可以在终端执行 java -version 看看，是不是刚才安装的 sun-j2sdk1.5_1.5.0)，我们还需要执行 <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">sudo update-alternatives --config java</span></div>  在弹出的选单中选择带有 sun 字样的一项，就把新安装的jdk设置成了默认的java解释器。 现在再执行 <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">java -version</span></div> 看看效果？最后，为了能够正常运行 Apache Tomcat ，还需要设置一个 JAVA_HOME 变量。  <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">sudo gedit /etc/profile</span></div>  在最后，加入  <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">export JAVA_HOME</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">/usr/lib/j2sdk1</span><span style="color: rgb(0, 0, 0);">.5</span><span style="color: rgb(0, 0, 0);">-sun</span></div>（也许你的机器上的jdk的安装路径不是这样的，你可以在新立得里查看jdk的属性，确定其具体位置）。到这里，jdk的安装算是安成了。<br />要指出的是，也许，源里面已经有jdk的包了，可以直接用源里的包安装，但是，源里的包一般都不是最新的。而通过自己编译的方式可以得到最新的jdk。<br /><br /><br />第二步就是安装JDK了。<br /><br />从www.eclipse.org上下载gtk版的eclipse3.2 (其实，只要你在ubuntu系统上用浏览器访问，网站会自动把eclipse的版本和你系统想匹配) 解压到本地的任意目录就算是安装完成了，简单吧？<br /><br /><br />第三步就是安装MyEclipse插件.<br /><br />从 www.myeclipseide.com 下载 5.* 版的myeclipse 的 手动安装包(ManualInstall)，要注意的是，虽然网站上提供得有rpm格式的安装包，这是给RedHat操作系统用的，Ubuntu是采用的Debian的deb格式封装软件包。把得到的zip文件解压到本地的任意目录，然后启动eclipse，选择 Help - Software Updates - Manage Configuration。在弹出的页面中，可以看到 Eclipse SDK 下是eclipse的安装路径，在该路径上点右键，在弹出的菜单中选择 Add - Extension Locaion ，添加一个扩展，也就是要指定myeclipse的路径了，在弹出的文件选择对话框中，选择myeclipse的路径，确定就可以了。然后，根据提示重启eclipse，myeclipse就算是安装完成了。<br />最后是安装Tomcat，从 tomcat.apache.org 下载非windows版本的安装包，解压到本地任意目录，进入到$Tomcat_Home/bin，执行 <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">./startup.sh </span></div>就可以启动 tomcat了，从终端的输出信息我们还可以再次确认tomcat所使用的java解释器是不是我们才安装的jdk 打开浏览器，访问 localhost:8080 查看到Tomcat的默认页面。要停止tomcat，执行 <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">./shutdown.sh</span></div>  至于管理员帐户的添加，可以根据tomcat默认页面上的说明修改 $Tomcat_Home/conf 下的 tomcat-users.xml 文件，添加一个用户，并把规则设置成 manager 就可以了。修改默认的 8080 端口，可以修改相同目录下的 server.xml ，要注意的一点是，如果端口号小于1024，在启动tomcat时，需要root权限，也就是用 <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">sudo ./startup.sh</span></div> 来启动。<br /><br />最后，还需要在MyEcipse里配置一下服务器，在 eclipse 的菜单栏上选择 window - Preferences 展开 MyEclipse，展开 Application Servers ，选择 Tomcat 5,在右侧的编辑区中，先选择 Enable，然后指定tomcat的根目录(Tomcat Home Directory)，根据实际情况指定即可。再在左侧去展开 Tomcat 5, 查看JDK项，是不是刚才安装的jdk。最后确认。这下回到eclipse的图形工具栏，就可以通过 服务器 那个图标启动/重启/关闭 tomcat。 点击试试，弹出个菜单，里面有个Tomcat 5 子菜单吧，再选择启动，就可以在下面的 控制台 看到一些输出信息，并启动tomcat。<br /><img src ="http://www.blogjava.net/xiaosilent/aggbug/81327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2006-11-15 17:20 <a href="http://www.blogjava.net/xiaosilent/archive/2006/11/15/build_a_JSF_develop_environment_on_Ubuntu.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何用Eclipse+MyEclipse快速搭建JSF开发环境</title><link>http://www.blogjava.net/xiaosilent/archive/2006/10/10/74298.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Tue, 10 Oct 2006 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2006/10/10/74298.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/74298.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2006/10/10/74298.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/74298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/74298.html</trackback:ping><description><![CDATA[应某某的要求，大概介绍一下如何用Eclipse和MyEclipse插件快速搭建JSF的开发环境。<br />第一步：安装Java环境<br />从sun官方下载J2SDK的安装包，注意自己的系统平台，不要下错了。Ubuntu等Debian衍生系统可以直接apt-get安装，安装完成后，运行 sudo update-alternatives --config java 来完成默认java解释器的配置，在出现的选项中选择带有sun-jdk5等类似字样的选项即可。windows系列操作系统(估计没有人再用win9x来写Java应用了)直接执行下载回来的可执行文件，可以选择不安装独立的jre和演示程序源码包等，记下安装的路径。安装完成后，在桌面(Desktop)上右击 我的电脑(My Computer)图标，选择 属性(Properties) 选择 高级(Advanced)选项卡，选择环境变量(Environment variables...) 选择 新建(New...)(任意一个新建都可以，建议选择修改当前用户的环境变量).在变量名中填写"PATH"(引号不用写)，变量值处填写".;d:\Jdk\bin"(假设，刚才的安装路径为d:\Java，根据自己实际情况进行修改)。再确定退出就可以了。可以在命令行里面验证一下，看是否配置正确：win+R键，打开运行(Run...)对话框，输入command，运行 java -version  看是否有 相关的输出。如果没有仔细检查刚才环境变量的设置。<br />第二步：安装Eclipse<br />说是安装Eclipse，就是去Eclipse官方下载自己相应版本的Eclipse的压缩包，解压到自己喜欢的目录就可以了。windows平台，直接执行eclipse.exe就可以了，Linux平台下可以先在桌面/面板等地方建立一个到解压出目录下的eclipse文件的连接，在执行该链接就可以了，也可以在终端里面执行。要说明的是，必须要先正确执行第一步才可以成功运行Eclipse。<br />第三步：安装MyEclipse插件<br />从MyEclipse官方下载和自己Eclipse版本和自己系统平台相对应的版本的MyEclipse插件安装包，下载回来后执行该安装文件(这里，各个平台的安装方式都一样，只是启动安装程序的方式不同而已)，指定先前安装的Eclipse的路径和要把MyEclipse安装到的路径，直接安装完成即可。<br />第四步：安装Jsp/Servlet容器<br />以安装Tomcat为例，从Tomcat官方下载自己对应平台的安装包。windows平台就不再说了，Linux平台下载回来的是压缩包，解压到适当目录，并，修改/etc/profile或其他环境变量配置文件。在文件后添加  <br />export JAVA_HOME=yourPath<br />export TOMCAT_HOME=yourPath<br />这两行，把其中的yourPath替换成你实际的路径就是了。然后重新启动计算机使更改生效(也可以通过在终端里执行 source /etc/profile 的方式来即时更新环境变量，但是后面所有的操作，都必须在该终端下进行。)。<br />下面就是如何建立JSF工程了。<br />启动Eclipse 设置缺省的工作区位置，关掉Welcome窗口，出现缺省的JDT视图。选择 File－New－Project－MyEclipse－J2EE Projects－Web Project，打开 New J2EE Web Project 对话框，填写适当的工程名等信息，一定要认真填写 Context root URL 这将会是你发布工程时的工程名。确定，系统提示要打开 MyEclipse J2EE Development 视图，选择 Yes 就自动打开该视图。这样，在左边的Package Explorer 看将会看到刚才建立的工程，且该工程的根目录被选定，现在在菜单栏上选择 MyEclipse－Add JSF Capabilities。打开 JavaServer Faces Support for MyEclipse Web Project 对话框，选择适当的 JSF 实现(JSF Implementation)，等等其他相关信息。再单击 Finish 就可以了。 这样，一个 JSF 工程就建好了，可以进行开发了。<br />最后，是发布工程。在发布工程以前，我们需要配置一下服务器。找到图形工具栏上的 启动服务器 的图标，选择 Configure Server 在出现的对话框中展开左边的Application Servers 树，找到 Tomcat5 单击，在右边出现的配置区中，选择 Enable 然后在 Tomcat Home Directory 中填写自己的 Tomcat 的安装路径 确定就可以了。在图形工具栏上刚才的服务器图标的左边，是发布工程的图标，选择，出现对话框。在 Project 后的选单里选择刚才的工程，在 Deployments 中选择 Add 出现 New Deployment 对话框，在Server里选择刚才配置好的Tomcat5，然后是选择是要发布成打包的.war 文件(Packaged Archive)还是直接按目录发布(Exploded Archive)。确认就是了。然后启动Tomcat，就可以看到自己刚建立的工程了。<img src ="http://www.blogjava.net/xiaosilent/aggbug/74298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2006-10-10 15:08 <a href="http://www.blogjava.net/xiaosilent/archive/2006/10/10/74298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[译] JavaServer Faces in Action 中关于 action listener 的讲解部分</title><link>http://www.blogjava.net/xiaosilent/archive/2006/10/10/74283.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Tue, 10 Oct 2006 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2006/10/10/74283.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/74283.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2006/10/10/74283.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/74283.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/74283.html</trackback:ping><description><![CDATA[
		<p>第一次尝试翻译，难免错误百出，敬请指正。</p>
		<p>当用户和代表命令或某操作(gesture)等控件发生交互的时候，触发 动作事件(action event)。产生动作事件的组件也叫做动作源，包括了按钮、超链接等组件。动作事件由动作监听器(action listener)进行处理。</p>
		<p>有两种典型的监听器：一种会影响到页面间的导航(navigation)，另一种不会影响到导航。影响到页面间导航的监听器主要是处理一些业务逻辑并返回几个业务逻辑结果，JSF的导航系统将会根据这个来选择恰当的下一个页面(译注:并非传统所说的TRUE/FALSE这两种“逻辑”结果，这里讲的是“业务逻辑”，可以是任意的有代表意义的结果。)不影响导航的事件监听器用来操作当前页面内的组件，或者是进行一些业务模型上的改变，或者是修改backing bean的属性等，并不会出现在页面间的跳转。</p>
		<p>在技术上，所有页面间导航都是由一个单一的动作监听器来处理。这个监听器自动处理组件所触发的所有事件(event)，因此，该监听器并不需要手动地注册/绑定(register)。缺省情况下，这个监听器会将所有的工作交由你制定的backing bean中的某个方法(method)来处理。因此，你可以用不同的方法来处理你程序中的各个业务部分。典型地，你的大多数业务逻辑都将会交由这些方法来处理。</p>
		<p>当某个组件触发一个事件的时候，缺省的监听器就决定了该事件的处理结果，该结果用一个字符串(string)来表示，比方说："success"、"failure" 等。这个结果也可以分为静态和动态两类。静态的是在编码的时候就已经定义好了的例如：<br />&lt;h:commandButton type="submit" value="Login" action="success" immadiate="true" /&gt;<br />在这个例子当中，当用户点击这个标为Login的按钮的时候，会产生 "success" 这个业务结果并同时触发该按钮被点击这个事件，但是，并没有相应的方法来处理这个事件。</p>
		<p>而动态的结果就是由处理该事件的方法所返回的，一个字符串。一个方法可能会返回多个不同的结果，这取决于业务逻辑。动作监听器会自动查找你在该组件的 action 属性中指定的方法，并执行。我们用 EL(expression language) 来指定该属性值。下面是一个 HtmlCommandButton 的实际例子：<br />&lt;h:commandButton type="submit" value="Login" action="#{user.login}" /&gt;<br />当用户点击该按钮，一个代表该按钮被点击的事件产生，并执行下面的事件处理方法：<br /></p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
				<span style="color: rgb(0, 128, 128);"> 1</span>
				<img id="Codehighlighter1_17_149_Open_Image" onclick="this.style.display='none'; Codehighlighter1_17_149_Open_Text.style.display='none'; Codehighlighter1_17_149_Closed_Image.style.display='inline'; Codehighlighter1_17_149_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_17_149_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_17_149_Closed_Text.style.display='none'; Codehighlighter1_17_149_Open_Image.style.display='inline'; Codehighlighter1_17_149_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">class</span>
				<span style="color: rgb(0, 0, 0);"> User</span>
				<span id="Codehighlighter1_17_149_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_17_149_Open_Text">
						<span style="color: rgb(0, 0, 0);">{<br /></span>
						<span style="color: rgb(0, 128, 128);"> 2</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<img src="http://www.blogjava.net/images/dot.gif" />
								<br />
						</span>
						<span style="color: rgb(0, 128, 128);"> 3</span>
						<span style="color: rgb(0, 0, 0);">
								<img id="Codehighlighter1_46_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_143_Open_Text.style.display='none'; Codehighlighter1_46_143_Closed_Image.style.display='inline'; Codehighlighter1_46_143_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_46_143_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_46_143_Closed_Text.style.display='none'; Codehighlighter1_46_143_Open_Image.style.display='inline'; Codehighlighter1_46_143_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="color: rgb(0, 0, 255);">public</span>
						<span style="color: rgb(0, 0, 0);"> String login()</span>
						<span id="Codehighlighter1_46_143_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_46_143_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /></span>
								<span style="color: rgb(0, 128, 128);"> 4</span>
								<span style="color: rgb(0, 0, 0);">
										<img id="Codehighlighter1_59_96_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_96_Open_Text.style.display='none'; Codehighlighter1_59_96_Closed_Image.style.display='inline'; Codehighlighter1_59_96_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_59_96_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_59_96_Closed_Text.style.display='none'; Codehighlighter1_59_96_Open_Image.style.display='inline'; Codehighlighter1_59_96_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
								<span style="color: rgb(0, 0, 255);">if</span>
								<span style="color: rgb(0, 0, 0);">(<img src="http://www.blogjava.net/images/dot.gif" />)</span>
								<span id="Codehighlighter1_59_96_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_59_96_Open_Text">
										<span style="color: rgb(0, 0, 0);">{ </span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">登陆成功</span>
										<span style="color: rgb(0, 128, 0);">
												<br />
										</span>
										<span style="color: rgb(0, 128, 128);"> 5</span>
										<span style="color: rgb(0, 128, 0);">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(0, 0, 255);">return</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">success</span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">;<br /></span>
										<span style="color: rgb(0, 128, 128);"> 6</span>
										<span style="color: rgb(0, 0, 0);">
												<img id="Codehighlighter1_101_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_101_139_Open_Text.style.display='none'; Codehighlighter1_101_139_Closed_Image.style.display='inline'; Codehighlighter1_101_139_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_101_139_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_101_139_Closed_Text.style.display='none'; Codehighlighter1_101_139_Open_Image.style.display='inline'; Codehighlighter1_101_139_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    }</span>
								</span>
								<span style="color: rgb(0, 0, 255);">else</span>
								<span id="Codehighlighter1_101_139_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_101_139_Open_Text">
										<span style="color: rgb(0, 0, 0);">{ </span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">登陆失败</span>
										<span style="color: rgb(0, 128, 0);">
												<br />
										</span>
										<span style="color: rgb(0, 128, 128);"> 7</span>
										<span style="color: rgb(0, 128, 0);">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(0, 0, 255);">return</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">failure</span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">; <br /></span>
										<span style="color: rgb(0, 128, 128);"> 8</span>
										<span style="color: rgb(0, 0, 0);">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
								</span>
								<span style="color: rgb(0, 0, 0);">
										<br />
								</span>
								<span style="color: rgb(0, 128, 128);"> 9</span>
								<span style="color: rgb(0, 0, 0);">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
						</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
						</span>
						<span style="color: rgb(0, 128, 128);">10</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<img src="http://www.blogjava.net/images/dot.gif" />
								<br />
						</span>
						<span style="color: rgb(0, 128, 128);">11</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>login方法的返回值取决于不同的业务逻辑，这里暂不讨论。类User 是一个 backing bean 它的某些属性值和页面上的某些输入控件的值相关联。 而该类会在 faces-config.xml 中有相应的定义。</p>
		<p>上面的例子中仅有 "success"、"failure" 等返回值，但是，实际应用中，你的程序可能要求你能操纵JSF组件、业务模型对象、添加消息等等。甚至是 实现页面的直接跳转、输出某个适当响应、和数据库 EJB 等组件 服务等实现交互 等等复杂的功能。动作监听器根据方法的返回值和导航系统中的定义来决定页面跳转。</p>
		<p>当你需要执行业务逻辑又不需要页面的跳转的时候，你可以给组件绑定一个 动作监听器方法(action listener method)，有别于动作方法(action method)，该方法除了可以绑定事件，还可以操纵组件。我们看下面的例子：<br />&lt;h:commandButton id="redisplayButton" type="submit" value="Redisplay" actionListener="#{loginForm.doIt()}" /&gt;<br />和前面的例子一样，当用户点击该按钮，有事件产生。但是，这次，动作监听器方法得到执行，而不是先前的动作方法。<br /></p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
				<span style="color: rgb(0, 128, 128);">1</span>
				<img id="Codehighlighter1_35_140_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_140_Open_Text.style.display='none'; Codehighlighter1_35_140_Closed_Image.style.display='inline'; Codehighlighter1_35_140_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_35_140_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_35_140_Closed_Text.style.display='none'; Codehighlighter1_35_140_Open_Image.style.display='inline'; Codehighlighter1_35_140_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> doIt(ActionEvent event)</span>
				<span id="Codehighlighter1_35_140_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_35_140_Open_Text">
						<span style="color: rgb(0, 0, 0);">{<br /></span>
						<span style="color: rgb(0, 128, 128);">2</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  HtmlCommandButton button </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> (HtmlCommandButton)event.getComponent();<br /></span>
						<span style="color: rgb(0, 128, 128);">3</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  button.setValue(</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">Try again!</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">);<br /></span>
						<span style="color: rgb(0, 128, 128);">4</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>该方法会改变先前点击的按钮的标题，虽然这并没有多少用处。但重要的是，这个方法的签名。他接受了一个 ActionEvent 类的参数，并没有返回值。这，就是 action listener method 和 action method 的主要区别！在前面的方法执行完以后，页面会被刷新，以显示效果。</p>
		<p>通常，用 action listener method 方法来执行对当前页面的改变。比方说 value-changing 事件等，你也可以用一个接口来实现，然而，在大多数情况下，用 backing bean 中的方法来实现就已经足够了。</p>
<img src ="http://www.blogjava.net/xiaosilent/aggbug/74283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2006-10-10 13:44 <a href="http://www.blogjava.net/xiaosilent/archive/2006/10/10/74283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaServer Faces in Action中 关于 action listener 的讲解</title><link>http://www.blogjava.net/xiaosilent/archive/2006/10/10/74259.html</link><dc:creator>xiaosilent</dc:creator><author>xiaosilent</author><pubDate>Tue, 10 Oct 2006 03:58:00 GMT</pubDate><guid>http://www.blogjava.net/xiaosilent/archive/2006/10/10/74259.html</guid><wfw:comment>http://www.blogjava.net/xiaosilent/comments/74259.html</wfw:comment><comments>http://www.blogjava.net/xiaosilent/archive/2006/10/10/74259.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaosilent/comments/commentRss/74259.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaosilent/services/trackbacks/74259.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Tahoma">
						<font color="#ff6633" size="2">稍后奉上翻译__==__ <br /></font>Action events are triggered when a user interacts with a control that represents a command,or a user gesture. Components that generate action events,also called action sources,include controls such as buttons or hyperlinks.Action events are handled by action listeners.</font>
		</p>
		<p>
				<font face="Tahoma">There are two types of action listeners:those that affect navigation,and those that don't.Action listeners that affect navigation typically perform some </font>
				<font face="Tahoma">processing and then return a logical outcome that is used by JSF's navigation system to select the next page(which may actually be the same page </font>
				<font face="Tahoma">that's currently being viewed). Listeners that don't affect navigation usually manipulate components in the current view,or perform some processing </font>
				<font face="Tahoma">that changes model object or backing bean properties,but doesn't alter the current page the user is accessing.</font>
		</p>
		<p>
				<font face="Tahoma">Technically,all navigation is handled by a single action listener.This listener automaatically handles any action events fired by a component,so it doesn't </font>
				<font face="Tahoma">need to be registered manually.By default,this action listener delegates all of its work to action methods in your backing beans,so you can have different </font>
				<font face="Tahoma">action methods handle different parts of your application.Typically,most of your application logic will be located in these methods.(The action listener is </font>
				<font face="Tahoma">pluggable,so it's possible to replace it with one that doesn't use action methods at all.)</font>
		</p>
		<p>
				<font face="Tahoma">When a component fires an action event,this default action listener determines its outcome string---"success"or"failure",for example.There are two basic </font>
				<font face="Tahoma">types of outcomes:static and dynamic.Static outcomes are hardcoded string that are declared with the component or set in code:<br />&lt;h:commondButton type="submit" value="Login" action="success" immediate="true"/&gt;<br />In this example,the static outcome of "success" will be generated when the user clicks on this HtmlCommandButton and generates an action event--no </font>
				<font face="Tahoma">action method will be called.</font>
		</p>
		<p>
				<font face="Tahoma">Dynamic outcomes are strings returned by action methods themselves---an action method might return a different outcome depending on whateever </font>
				<font face="Tahoma">application logic it performs.The action listener looks for an action method whenever you use a JSF EL(Expression Language) expression in the action </font>
				<font face="Tahoma">property.Here's an HtmlCommandButton that exectutes an action method instead:<br />&lt;h:commandButton type="submit" value="Login" action="#{user.login}"/&gt;<br />When a user clicks on this button,an action event is fired,and the follwing method is executed in response to the event:<br /></font>
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
				<span style="color: rgb(0, 128, 128);"> 1</span>
				<img id="Codehighlighter1_17_156_Open_Image" onclick="this.style.display='none'; Codehighlighter1_17_156_Open_Text.style.display='none'; Codehighlighter1_17_156_Closed_Image.style.display='inline'; Codehighlighter1_17_156_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_17_156_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_17_156_Closed_Text.style.display='none'; Codehighlighter1_17_156_Open_Image.style.display='inline'; Codehighlighter1_17_156_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">class</span>
				<span style="color: rgb(0, 0, 0);"> User</span>
				<span id="Codehighlighter1_17_156_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_17_156_Open_Text">
						<span style="color: rgb(0, 0, 0);">{<br /></span>
						<span style="color: rgb(0, 128, 128);"> 2</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<img src="http://www.blogjava.net/images/dot.gif" />
								<br />
						</span>
						<span style="color: rgb(0, 128, 128);"> 3</span>
						<span style="color: rgb(0, 0, 0);">
								<img id="Codehighlighter1_46_150_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_150_Open_Text.style.display='none'; Codehighlighter1_46_150_Closed_Image.style.display='inline'; Codehighlighter1_46_150_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_46_150_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_46_150_Closed_Text.style.display='none'; Codehighlighter1_46_150_Open_Image.style.display='inline'; Codehighlighter1_46_150_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="color: rgb(0, 0, 255);">public</span>
						<span style="color: rgb(0, 0, 0);"> String login()</span>
						<span id="Codehighlighter1_46_150_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_46_150_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /></span>
								<span style="color: rgb(0, 128, 128);"> 4</span>
								<span style="color: rgb(0, 0, 0);">
										<img id="Codehighlighter1_59_111_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_111_Open_Text.style.display='none'; Codehighlighter1_59_111_Closed_Image.style.display='inline'; Codehighlighter1_59_111_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_59_111_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_59_111_Closed_Text.style.display='none'; Codehighlighter1_59_111_Open_Image.style.display='inline'; Codehighlighter1_59_111_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
								<span style="color: rgb(0, 0, 255);">if</span>
								<span style="color: rgb(0, 0, 0);">(<img src="http://www.blogjava.net/images/dot.gif" />)</span>
								<span id="Codehighlighter1_59_111_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_59_111_Open_Text">
										<span style="color: rgb(0, 0, 0);">{ </span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);"> successfully login</span>
										<span style="color: rgb(0, 128, 0);">
												<br />
										</span>
										<span style="color: rgb(0, 128, 128);"> 5</span>
										<span style="color: rgb(0, 128, 0);">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(0, 0, 255);">return</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">success</span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">;<br /></span>
										<span style="color: rgb(0, 128, 128);"> 6</span>
										<span style="color: rgb(0, 0, 0);">
												<img id="Codehighlighter1_116_146_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_146_Open_Text.style.display='none'; Codehighlighter1_116_146_Closed_Image.style.display='inline'; Codehighlighter1_116_146_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_116_146_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_116_146_Closed_Text.style.display='none'; Codehighlighter1_116_146_Open_Image.style.display='inline'; Codehighlighter1_116_146_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    }</span>
								</span>
								<span style="color: rgb(0, 0, 255);">else</span>
								<span id="Codehighlighter1_116_146_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_116_146_Open_Text">
										<span style="color: rgb(0, 0, 0);">{<br /></span>
										<span style="color: rgb(0, 128, 128);"> 7</span>
										<span style="color: rgb(0, 0, 0);">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span>
										<span style="color: rgb(0, 0, 255);">return</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">failure</span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">;<br /></span>
										<span style="color: rgb(0, 128, 128);"> 8</span>
										<span style="color: rgb(0, 0, 0);">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
								</span>
								<span style="color: rgb(0, 0, 0);">
										<br />
								</span>
								<span style="color: rgb(0, 128, 128);"> 9</span>
								<span style="color: rgb(0, 0, 0);">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
						</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
						</span>
						<span style="color: rgb(0, 128, 128);">10</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<img src="http://www.blogjava.net/images/dot.gif" />
								<br />
						</span>
						<span style="color: rgb(0, 128, 128);">11</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>
				<br />Based on some voodoo application logic,this action method returns an outcome of either "success" or "failure" . User is a backing bean whose properties <font face="Tahoma">are wired up to input control values on the page,and is configured via the Managed Bean Creation facility.</font></p>
		<p>
				<font face="Tahoma">My example has voodoo logic,but your action methods can manipulate JSF components,model objects,or add messages.They can also do other fun </font>
				<font face="Tahoma">tasks,such sa performing a redirect,rendering a response(a graphic or some binary type of data),ading events,and talking to databases,EJB(Enterprise </font>
				<font face="Tahoma">JavaBean) servers,or web services.The action listener uses the outcome of an action method to hook into the navigation system and determine what </font>
				<font face="Tahoma">page to choose next.</font>
		</p>
		<p>
				<font face="Tahoma">When you need to execute application logic that is not associated with navigation you can associate an action listener method with a component.Unlike </font>
				<font face="Tahoma">action methods,action listener methods have access to the component that fired the event as well.Take a look at this example:<br />&lt;h:commandButton id="redisplayCommand" type="submit" value="Redisplay" actionListener="#{myForm.doIt}" /&gt;<br />Like the previous example , when a user clicks on this HtmlCommandButton , an action event is fired. This time,however,the action listener method is </font>
				<font face="Tahoma">executed instead of the action method:<br /></font>
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
				<span style="color: rgb(0, 128, 128);">1</span>
				<img id="Codehighlighter1_35_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_143_Open_Text.style.display='none'; Codehighlighter1_35_143_Closed_Image.style.display='inline'; Codehighlighter1_35_143_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_35_143_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_35_143_Closed_Text.style.display='none'; Codehighlighter1_35_143_Open_Image.style.display='inline'; Codehighlighter1_35_143_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> doIt(ActionEvent event)</span>
				<span id="Codehighlighter1_35_143_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_35_143_Open_Text">
						<span style="color: rgb(0, 0, 0);">{<br /></span>
						<span style="color: rgb(0, 128, 128);">2</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  HtmlCommandButton button </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> (HtmlCommandButton)event.getCommponent();<br /></span>
						<span style="color: rgb(0, 128, 128);">3</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  button.setValue( </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">It's done!</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> );<br /></span>
						<span style="color: rgb(0, 128, 128);">4</span>
						<span style="color: rgb(0, 0, 0);">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="color: rgb(0, 0, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 128, 128);">5</span>
				<span style="color: rgb(0, 0, 0);">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>This method changes the value(label) of the button that fired the event---not terribly useful.What's important,however,is its method signature.Instead <font face="Tahoma">of accepting an ActionEvent sa a parameter and don't return an outcome at all. After this method executes,the page will be redisplayed,incorporating </font><font face="Tahoma">any changes made by the method.</font></p>
		<p>
				<font face="Tahoma">Usually,you use action listener methods for changes that affect the current view. Like value-change listeners,you can also implement an action listener </font>
				<font face="Tahoma">using a Java interface,although in most cases using a method in an existing backing bean is sufficient.</font>
		</p>
<img src ="http://www.blogjava.net/xiaosilent/aggbug/74259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaosilent/" target="_blank">xiaosilent</a> 2006-10-10 11:58 <a href="http://www.blogjava.net/xiaosilent/archive/2006/10/10/74259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>