﻿<?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-amp@java-随笔分类-JSF</title><link>http://www.blogjava.net/amplifier/category/7853.html</link><description>amplifier's java blog</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 05:03:21 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 05:03:21 GMT</pubDate><ttl>60</ttl><item><title>MyFaces与JFreeChart的包冲突</title><link>http://www.blogjava.net/amplifier/archive/2007/01/23/95544.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Tue, 23 Jan 2007 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2007/01/23/95544.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/95544.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2007/01/23/95544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/95544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/95544.html</trackback:ping><description><![CDATA[
		<p>JFreeChart的lib里有gnujaxp.jar包，添加到WEB-INF/lib里之后，解析faces-configv.xml的时候就会使用gnujaxp包里面的东西，会出现java.net.MalformedURLException: no protocol的异常，google也找不到相关的例子，仔细看了一下错误输出，看到有个org.gnu.jaxp...之类的语句，才知道是这个包引起的错误，把它删掉就好了。</p>
<img src ="http://www.blogjava.net/amplifier/aggbug/95544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2007-01-23 15:01 <a href="http://www.blogjava.net/amplifier/archive/2007/01/23/95544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse中WTP的bug（context加载两次）</title><link>http://www.blogjava.net/amplifier/archive/2006/11/07/79671.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Tue, 07 Nov 2006 11:02:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/11/07/79671.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/79671.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/11/07/79671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/79671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/79671.html</trackback:ping><description><![CDATA[
		<p>使用WTP中的run on server来调试web程序时，按照默认的配置，会把该程序放在根目录，即context为"/"，启动的时候会加载两次，如果有ServletContextListener的话，里面的东西就会运行两次；如果修改配置，通过Project-&gt;Property-&gt;Web Project Settings，把Context Root改为web project名的话，运行的时候就不会把ServletContextListener加载两次，不过除了正常加载指定的web程序外，还会试图加载一个不存在的context，导致抛出ClassNotFoundException异常，不过不影响使用，后来发现这是WTP的bug，不过描述的好像跟我遇到的情形不太一样。<br /><a href="http://dev.eclipse.org/newslists/news.eclipse.webtools/msg09647.html" target="_blank"><font color="#663366" size="2">http://dev.eclipse.org/newslists/news.eclipse.webtools/msg09647.html</font></a><br /><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=125364" target="_blank"><font color="#663366" size="2">https://bugs.eclipse.org/bugs/show_bug.cgi?id=125364</font></a></p>
<img src ="http://www.blogjava.net/amplifier/aggbug/79671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-11-07 19:02 <a href="http://www.blogjava.net/amplifier/archive/2006/11/07/79671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取HTML元素的真正位置与大小</title><link>http://www.blogjava.net/amplifier/archive/2006/11/07/79668.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Tue, 07 Nov 2006 10:50:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/11/07/79668.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/79668.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/11/07/79668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/79668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/79668.html</trackback:ping><description><![CDATA[
		<p>使用HTML元素的style.left,style.top,style.width,style.height以及width,height属性，都不能获得元素的真正位置与大小，这些属性取出来的都是原来的设置值，例如&lt;table  id="table1" width="500"&gt;，那么通过document.getElementById("table1").width取出来的值永远都是500，而不管这个表格是否已经被撑大了；同时，通过document.getElementById("table1").style.left获得的值是空的，因为没有设置这个值。<br />要取得HTML元素的真正位置与大小，只能通过offsetLeft,offsetTop,clientWidth,clientHeight,offsetWidth,offsetHeight属性，其中offsetLeft与offsetTop分别是当前元素在父元素内的相对左坐标与相对顶坐标，要取得绝对坐标，还需要用到offsetParent属性，改属性取得当前元素的父元素。要取得绝对坐标，就必须依次获得父元素的相对坐标，直到父元素为空，然后把所有相对坐标加起来，得到当前元素的绝对坐标。<br />最常见的是日期选择框，当点击按钮时弹出日期选择框总是在按钮的旁边，这个选择框的坐标，就是根据按钮的坐标以及按钮的offsetWidth,offsetHeight来取得的。 <br /></p>
<img src ="http://www.blogjava.net/amplifier/aggbug/79668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-11-07 18:50 <a href="http://www.blogjava.net/amplifier/archive/2006/11/07/79668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web表格打印页面的生成</title><link>http://www.blogjava.net/amplifier/archive/2006/11/07/79533.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Tue, 07 Nov 2006 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/11/07/79533.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/79533.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/11/07/79533.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/79533.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/79533.html</trackback:ping><description><![CDATA[
		<p>要把一个长表格打印出来，要做到正确分页，直接用HTML生成表格是不能满足要求的：<br />1、如果把整个表格放在一页，在打印时再自动分页，则有可能在某一表格行中间分页，而且只能有一个表格头，不能每页一个，因为你不知道会在哪里分页；<br />2、如果按照固定的行数分页，由于每行的高度不一样，就会造成有的页不能填满，有的却太满自动分页了。<br /><br />原来考虑过一种方法：<br />利用Javascript动态生成表格，每次往表格的最后插入一行，然后检查表格高度，如果高度超过了一页的最大高度，则把这一行删除，新建一个表格，把这一行插入到新的表格里面，如此循环，直到全部行插入完毕。但是，利用table的height属性、style.height属性都得不到表格的实际高度（只有设置了height属性、style的height属性才能取得这两个值，但只是设置值，并不是实际值），于是就只能放弃了。<br /><br />后来仔细查看了table的dom属性，才知道它还有clientHeight,offsetHeight等属性，这两个才是表格的真正高度，它们之间的区别可看这里：<br /><a href="http://developer.mozilla.org/cn/docs/DOM:element.clientHeight">http://developer.mozilla.org/cn/docs/DOM:element.clientHeight</a><br /><a href="http://developer.mozilla.org/en/docs/DOM:element.offsetHeight">http://developer.mozilla.org/en/docs/DOM:element.offsetHeight</a><br />更直观的可以看这里：<br /><a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/measuring.asp">http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/measuring.asp</a><br /><img src="http://msdn.microsoft.com/workshop/graphics/dhtmlpos.gif" /><br /><br />简单地说，clientHeight就是不包含border的高度，offsetHeight就是连border的高度。对于要打印的表格，border一般只有2px，所以用clientHeight和offsetHeight区别不大。<br /><br />构建这个页面需要用到的：<br /><br />table的<a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/insertrow.asp">insertRow</a>(),<a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/deleterow.asp">deleteRow</a>()方法，用来给表格增加、删除一行(tr)；<br />tr的<a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/insertcell.asp">insertCell</a>()方法，用来给一行加入一格(td)；<br />td的innerText属性，用来给一格加入内容。<br /><br />CSS分页要用到page-break-before:always(或page-break-after:aways)的样式，遇到使用了该样式的标签，就会在标签前面（或后面）强制分页，于是可以在两个表格之间加一个这样的分页。<br />为了显示而不打印，还要用到&lt;style&gt;标签的media属性，当设置<br />&lt;style media="print"&gt;<br />.noprint {display:none}<br />&lt;/style&gt;<br />时，用了noprint作为class的标签就只会显示而不打印出来。<br /><br />对于IE，还可以使用WebBrowser控件，弹出“页面设置”窗口、“打印预览”窗口、直接打印等功能。对于其他浏览器，则只能调用window.print()函数了。<br /><br />JSF生成的中文都是用&amp;#unicode;来表示的，其中unicode是中文字符的UNICODE编码，通过innerText生成表格内容时，必须把这些东西转换成真正的中文，否则会直接把这些符号插入到表格中，惨不忍睹。javascript里有个String.fromCharCode()函数可以把Unicode编码转换成字符。另外，通过innerHTML加入内容也可把这些编码正常显示出来，但需要escape XML，以免把内容当作HTML标签渲染。<br /><br /><br /></p>
<img src ="http://www.blogjava.net/amplifier/aggbug/79533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-11-07 10:11 <a href="http://www.blogjava.net/amplifier/archive/2006/11/07/79533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>禁止浏览器缓存</title><link>http://www.blogjava.net/amplifier/archive/2006/10/16/75485.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Mon, 16 Oct 2006 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/10/16/75485.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/75485.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/10/16/75485.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/75485.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/75485.html</trackback:ping><description><![CDATA[浏览器缓存对jsp,servlet来说都有时候是很致命的。以前用AJAX实现一个进度条，每隔1秒向服务器询问一次进度，服务器返回当前的百分比，就一个数字。开始的时候没有禁止缓存，结果进度条老是不动。我在自己的电脑上测试还没发现这个问题，因为我在internet选项了选择了“每次访问此页时检查”，而默认选项是“自动”，其实就是允许缓存。禁止缓存可以在HTML中写，也可以在http header里面写，但对于非HTML页面，就只有后面那种选择了，在servlet里可以这样写：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">response.setHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Pragma</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">No-Cache</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />response.setHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Cache-Control</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">No-Cache</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />response.setDateHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Expires</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);</span></div><br /> 必须三个都写上才能应付各种浏览器。似乎大小写敏感（不确定，但上面这种肯定适用于IE 5,6）。还有Expires那个值有人说是-1。<img src ="http://www.blogjava.net/amplifier/aggbug/75485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-10-16 21:32 <a href="http://www.blogjava.net/amplifier/archive/2006/10/16/75485.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WTP中Publishing failed:Resource /xxxx does not exist问题的解决</title><link>http://www.blogjava.net/amplifier/archive/2006/08/31/66812.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Thu, 31 Aug 2006 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/08/31/66812.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/66812.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/08/31/66812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/66812.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/66812.html</trackback:ping><description><![CDATA[
		<p>问题描述：<br />使用WTP开发WEB程序，需要把WEB-INF/lib下的某个jar库删除，在eclipse的项目浏览器里是删不掉的，因为它在BuildPath里。于是就先把eclipse关掉，然后通过资源管理器找到那个project的文件夹，把文件删除。重新打开eclipse，运行该web程序（Run on server），会出现Publishing failed错误，详细信息为：Resource /xxxx does not exist，其中/xxxx是那个project文件夹。怎么可能呢，那个文件夹好好地放在那里，居然说does not exist！<br /><br />原因：<br />由于在外面把某个jar删掉，eclipse还不知道，发布web程序的时候以为那个jar还在，于是就把它发布出去，但那个文件不存在，所以就报错。只是这个错报得太离谱，一个文件不见了就说整个project不存在，简直是误导观众！<br /><br />解决方法：<br />删除jar的时候不能直接在eclipse里删，更不能在外面删。要先把整个Web Library从BuildPath里去掉，这样lib里的所有jar都不在BuildPath里了，然后在eclipse的项目浏览器(Navigator view)里把jar删除，然后再添加Web Library。<br /></p>
<img src ="http://www.blogjava.net/amplifier/aggbug/66812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-08-31 11:28 <a href="http://www.blogjava.net/amplifier/archive/2006/08/31/66812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat的JNI库加载问题解决办法</title><link>http://www.blogjava.net/amplifier/archive/2006/08/31/66806.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Thu, 31 Aug 2006 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/08/31/66806.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/66806.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/08/31/66806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/66806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/66806.html</trackback:ping><description><![CDATA[Tomcat的Release Notes 里有这么一段话：<br />=======================<br />JNI Based Applications:<br />=======================<br />Applications that require native libraries must ensure that the libraries have<br />been loaded prior to use.  Typically, this is done with a call like:<br /><br />  static {<br />    System.loadLibrary("path-to-library-file");<br />  }<br /><br />in some class.  However, the application must also ensure that the library is<br />not loaded more than once.  If the above code were placed in a class inside<br />the web application (i.e. under /WEB-INF/classes or /WEB-INF/lib), and the<br />application were reloaded, the loadLibrary() call would be attempted a second<br />time.<br /><br />To avoid this problem, place classes that load native libraries outside of the<br />web application, and ensure that the loadLibrary() call is executed only once<br />during the lifetime of a particular JVM.<br /><br />简单地说就是JNI库的加载在启动Tomcat的JVM中只能进行一次，如果两次执行System.loadLibrary("path-to-library-file");将会导致错误（Error，不是Exception）：<br /><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">java.lang.UnsatisfiedLinkError: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial">Native Library xxx.dll already loaded in another classloader</span>。<br />可是这段话并没有给出具体的解决办法。我要使用的一个NT登录验证的JAAS模块碰到了这个问题：我把包含这个语句的库放在了某个web应用程序的lib目录下，结果当修改了某个web配置文件导致这个程序的context reload时，JAAS模块就不能使用，因为它又重新加载JNI库导致错误。只有重新启动整个tomcat才能恢复正常，十分麻烦。<br />找了好久，终于在一个大侠的文章(<a href="http://cuiyingfeng.blog.ccidnet.com/blog/ccid/do_showone/tid_48232.html">http://cuiyingfeng.blog.ccidnet.com/blog/ccid/do_showone/tid_48232.html</a>)中找到了解决方法：<br />1、加载JNI库的包放在Tomcat的common/lib目录下，而不要放在各context的lib目录下；<br />2、每次加载JNI库之前检查是否已经加载过。<br />由于加载语句不是我能控制的，所以第二种方法不能实现，于是我就通过第一种方法把这个问题解决了。</p><img src ="http://www.blogjava.net/amplifier/aggbug/66806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-08-31 11:13 <a href="http://www.blogjava.net/amplifier/archive/2006/08/31/66806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bea Workshop Studio 3.1与MyEclipse 4.1.1冲突</title><link>http://www.blogjava.net/amplifier/archive/2006/06/15/52956.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Thu, 15 Jun 2006 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/06/15/52956.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/52956.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/06/15/52956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/52956.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/52956.html</trackback:ping><description><![CDATA[之前Bea Workshop Studio 3.0可以与MyEclipse 4.1.1和平共处，在同一个eclipse可以用到两个插件的好东西，但装了最新的Bea Workshop Studio 3.1后，用 Workshop 的JSP编辑器打开JSP文件时，在源代码部分却是普通的文本显示，语法高亮、代码提示通通不见了，把MyEclipse去掉后一切恢复正常。可能是因为Workshop和MyEclipse均集成了WTP，而MyEclipse的WTP版本比Workshop的低，造成了冲突。<img src ="http://www.blogjava.net/amplifier/aggbug/52956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-06-15 11:35 <a href="http://www.blogjava.net/amplifier/archive/2006/06/15/52956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Backing Bean中控制dataScroller实现翻页</title><link>http://www.blogjava.net/amplifier/archive/2006/06/15/52949.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Thu, 15 Jun 2006 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/06/15/52949.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/52949.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/06/15/52949.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/52949.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/52949.html</trackback:ping><description><![CDATA[用Tomahawk的&lt;h:dataScroller&gt;时，<font color="#000000">如果在表格中增加了操作控件，点击后会对表的行数产生影响时，就需要在backing bean的action method里对表格进行翻页。例如，表格的每一行有个“删除”按钮，在该按钮的监听函数里对数据库进行删除操作后需要更新表格内容，这时候如果删除的正好是最后一页的最后一条记录，则更新表格的dataModel后，表格仍停留在最后一页，但没有显示任何记录，需要手动翻到前一页才能看到其他记录，行为十分怪异。因此需要在监听函数里判断当前删除的时候为最后一页的最后一条记录，如果是的话就通过程序翻到前一页。<br />具体实现如下：<br />在表格所在页面的backing bean里增加一个HtmlDataScroller成员变量，并设置它的setter和getter，再通过页面上的dataScroller控件中的binding属性把该控件与成员变量联系起来，然后在按钮监听处理中对该控件进行操作。要把表格定位在某一页，需要用到HtmlDataScroller的getUIData().setFirst()方法。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_21_317_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_317_Open_Text.style.display='none'; Codehighlighter1_21_317_Closed_Image.style.display='inline'; Codehighlighter1_21_317_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_21_317_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_21_317_Closed_Text.style.display='none'; Codehighlighter1_21_317_Open_Image.style.display='inline'; Codehighlighter1_21_317_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> PageBean</span><span id="Codehighlighter1_21_317_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_21_317_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> HtmlDataScroller scroller </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_106_131_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_131_Open_Text.style.display='none'; Codehighlighter1_106_131_Closed_Image.style.display='inline'; Codehighlighter1_106_131_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_106_131_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_106_131_Closed_Text.style.display='none'; Codehighlighter1_106_131_Open_Image.style.display='inline'; Codehighlighter1_106_131_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> HtmlDataScroller getScroller()</span><span id="Codehighlighter1_106_131_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_106_131_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> scroller;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_185_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_219_Open_Text.style.display='none'; Codehighlighter1_185_219_Closed_Image.style.display='inline'; Codehighlighter1_185_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_185_219_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_185_219_Closed_Text.style.display='none'; Codehighlighter1_185_219_Open_Image.style.display='inline'; Codehighlighter1_185_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setScroller(HtmlDataScroller scroller)</span><span id="Codehighlighter1_185_219_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_185_219_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.scroller </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> scroller;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_258_316_Open_Image" onclick="this.style.display='none'; Codehighlighter1_258_316_Open_Text.style.display='none'; Codehighlighter1_258_316_Closed_Image.style.display='inline'; Codehighlighter1_258_316_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_258_316_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_258_316_Closed_Text.style.display='none'; Codehighlighter1_258_316_Open_Image.style.display='inline'; Codehighlighter1_258_316_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String buttonListionMethod()</span><span id="Codehighlighter1_258_316_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_258_316_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    scroller.getUIData().setFirst(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span></span></div></font><img src ="http://www.blogjava.net/amplifier/aggbug/52949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-06-15 11:12 <a href="http://www.blogjava.net/amplifier/archive/2006/06/15/52949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF中binding的用法(转)</title><link>http://www.blogjava.net/amplifier/archive/2006/06/14/52645.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Wed, 14 Jun 2006 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/06/14/52645.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/52645.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/06/14/52645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/52645.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/52645.html</trackback:ping><description><![CDATA[
		<div class="pad5x10">from <a href="http://forum.java.sun.com/thread.jspa?threadID=628910&amp;messageID=3618808">http://forum.java.sun.com/thread.jspa?threadID=628910&amp;messageID=3618808</a><br />hello,<br /><br />first time i want to excuse my english language ( i love spanish :P );<br /><br />i pass a whole morning to found the solution: How to go to page 1 in a DataScroller ( tomahawk component ) when we execute a filter ?¿<br /><br />we need to binding the component instance in the backing bean ( manage bean )<br /><br />JSP PAGE :<br />&lt;t:dataScroller .... .... binding="MB.scroll" /&gt;<br /><br />MANAGE BEAN:<br />private HTMLDataScroller scroll = null;<br /><br />....<br />....<br />getScroll....<br />setScroll...<br /><br />ok, now we have the same instance of an object in "front" and "back".<br />in my case, when a execute a filter i call the method executeFilter()<br /><br />public void executeFilter(){<br />...<br />...<br />// this is the function for returning to page 1 in a dataScroller <br /><b>scroll.getUIDate.setFirst(0)</b><br />...<br />...<br />}<br /><br />I Hope that can help every JSF crazy programmer :P<br /><br />bye... </div>
<img src ="http://www.blogjava.net/amplifier/aggbug/52645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-06-14 09:37 <a href="http://www.blogjava.net/amplifier/archive/2006/06/14/52645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF带来了什么？</title><link>http://www.blogjava.net/amplifier/archive/2006/04/08/39936.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Fri, 07 Apr 2006 17:08:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/04/08/39936.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/39936.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/04/08/39936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/39936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/39936.html</trackback:ping><description><![CDATA[当初看上JSF，是因为看中了几个好处：<br />1、获取或显示表单数据时用相同的EL即可，JSF之前的EL只能get不能set；<br />2、MyFaces实现里面有很多很“炫”的组件，例如下拉菜单，树型控件，日期选择控件等等，使用极其方便。<br />于是就在一个小项目中使用JSF开发，用着就发现其实这个东西也带来了很多比以前更麻烦的地方，就拿很常见的数据库操作——查询、修改、插入、删除来说明使用JSF来实现有什么麻烦：<br />1、查询。对于小数据量，用一个dataTable就什么都搞定了。可是大数据量分页就比较麻烦了，因为dataTable的分页是把所有数据都取出来然后再一页页显示，而大数据量下一般是要看哪一页就取哪一页。网上有个通用的分页存储过程，只要把一系列参数（页码，排序依据，每页大小等）传给它，就能获得某一页的数据。如果直接通过URL来传递那些参数，服务器根据参数来调用存储过程，是很方便的事情。可是JSF却不通过URL来传递参数了，整个页面处理的过程也比较复杂，没有以前那样直观。有人改了一下dataModel的实现方式，使它每次只取一页的数据，效果是达到了，但要跳到某一页，却只能点链接，不能通过输入URL来到达了（也就是不能把某一页添加到收藏夹里了）。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">这两天做了一些试验，在jsf里还是可以通过URL传递参数的，在Backing Bean里可以通过ValueBinding的getValue取得URL参数，然后根据参数来从数据库中取得相应的内容，生成某个对象的bean，再在页面上显示出来。不过这样一来，似乎就跟servlet差不多了。<br />如果可以通过配置来设定表单提交是get方式还是post方式就好了。可是目前一律只能post，这样造成的后果除了不能收藏，不能刷新（会提示是否重新提交数据）之外，还会使浏览器的后退功能失效。</span></div><br />2、修改。在datatable中把数据显示出来后，可以每一行加一个commanButton，在它的action method中调用dataModel的getRowData()方法来得到该行的数据，把数据保存在一个request范围的bean里面，再转向到另一个页面通过可编辑表单来显示该bean的内容，在那里就可以修改、提交了。由于是使用了forward方式转向，所以url显示的页面还是数据显示的那个页面，只要一刷新，就又回到数据显示那一页而不是修改那一页了；如果不想修改，按一下浏览器的后退按钮，虽然回到了数据显示的那一页，但上面的commandButton已经失效，例如点击修改按钮，没有任何反应，必须把那一页刷新一下再点才有效。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">为了解决这个问题，我采用了URL传递参数的方法。通过在URL中指定ID来说明要修改的是哪个对象，在修改页面的backing bean的构造函数中，读取URL参数来获得ID，然后通过查询数据库得到该对象的其他内容，再显示在页面上。这样就可以刷新，可以后退。</span></div><br />3、新增。新增跟修改可以用同一个页面来显示，只是commandButton对应不同的action method，例如“修改”按钮对应的是update，“新增”按钮对应的是create，在两个method里分别使用数据库的update语句和insert语句即可。新增的时候是没有ID的，修改的时候则已经有了ID。<br /><br />4、删除。在显示数据的dataTable里，每行可以添加一个commandButton，在它的action method里，读取该行数据，得到ID后执行SQL的DELETE语句即可，比较简单。<br /><br />无论是做什么，都离不开三个东西：页面，配置文件，Backing Bean。页面是表现层的东西，负责把页面上的东西与Backing Bean联系起来。配置文件则指定在页面上使用的Backing Bean的名字、类、使用范围，还有导航规则(Navigation Rules)。Backing Bean就是程序的逻辑部分了。即使实现最简单的功能，例如显示某个变量的值，这三个东西都是必不可少的。<br />修改页面的时候，虽然不用重启服务器，但必须在新的session里才能看出效果来，最简单的办法就是把浏览器关掉，打开一个新的，查看结果。修改了配置文件和backing bean 就必须重启服务器了。所以调试JSF是很麻烦的。<img src ="http://www.blogjava.net/amplifier/aggbug/39936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-04-08 01:08 <a href="http://www.blogjava.net/amplifier/archive/2006/04/08/39936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在JSF页面中引用Backing Bean时，一定要注意该Bean在faces-config.xml中已定义</title><link>http://www.blogjava.net/amplifier/archive/2006/04/08/39934.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Fri, 07 Apr 2006 16:43:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/04/08/39934.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/39934.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/04/08/39934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/39934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/39934.html</trackback:ping><description><![CDATA[否则会带来很多莫名其妙的问题。<br />如果在开发过程中发现有奇怪的问题，首先要检查在页面中引用的Backing Bean是否已经在配置文件中定义！<img src ="http://www.blogjava.net/amplifier/aggbug/39934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-04-08 00:43 <a href="http://www.blogjava.net/amplifier/archive/2006/04/08/39934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[翻译]使用AJAX和JavaServerFaces实现更好的文件上传</title><link>http://www.blogjava.net/amplifier/archive/2006/03/19/36100.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Sun, 19 Mar 2006 13:05:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/03/19/36100.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/36100.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/03/19/36100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/36100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/36100.html</trackback:ping><description><![CDATA[
		<p>    英文原文链接：<a href="http://today.java.net/pub/a/today/2006/02/09/file-uploads-with-ajax-and-jsf.html">http://today.java.net/pub/a/today/2006/02/09/file-uploads-with-ajax-and-jsf.html</a><br /><br />    Translated by amplifier<br /><br />    基于浏览器的文件上传，特别是那些通过调用HTML标签&lt;input type="file"&gt;来实现的文件上传，总是有很大的缺陷。大家都知道，上传一个大于10MB的文件会导致非常糟糕的用户体验。当用户提交表单上传文件后，浏览器在把文件上传到服务器的过程中就会表现得像失去响应一样。当这个过程在后台进行中的时候，很多不耐烦的用户就会以为服务器挂掉了，于是就尝试重新提交表单，这样一来就更糟糕了。</p>
		<p>    为了使文件上传的用户界面更友好，很多网站采用显示不确定的进度动画（例如一个翻转的图标）来提示用户已提交文件。虽然这种技术会让用户觉得好受一点，但它只提供了极少与文件上传状态相关的信息。另外一种尝试是通过实现一个applet来把文件上传到FTP服务器上，这种方法的缺点是它只对有java的浏览器可用。</p>
		<p>   在本文，我们将会使用一种新的方法，通过实现一个使用AJAX技术的组件来达到目的，该组件不仅仅把文件上传到服务器，还“实时”监控文件上传的实际进度。该组件的四个状态如图1，2，3，4所示：<br /></p>
		<p>
				<img height="90" alt="Stage 1: Selecting the file upload" src="http://today.java.net/images/2006/02/ajax-jsf-figure1.gif" width="555" />
				<br />
				<i>图1. 阶段1：选择要上传的文件<br /></i>
				<img height="80" alt="Stage 2: Uploading the file to the server" src="http://today.java.net/images/2006/02/ajax-jsf-figure2.gif" width="557" />
				<br />
				<i>图2.阶段2：上传中</i>
		</p>
		<p>
				<img height="104" alt="Stage 3: Uploaded completed." src="http://today.java.net/images/2006/02/ajax-jsf-figure3.gif" width="551" />
				<br />
				<i>图3.阶段3：上传完毕</i>
		</p>
		<p>
				<img height="172" alt="File Upload Summary" src="http://today.java.net/images/2006/02/ajax-jsf-figure4.gif" width="552" />
				<br />
				<i>图4.文件上传概要<br /></i>
		</p>
		<p>（未完待续）<br /> </p>
<img src ="http://www.blogjava.net/amplifier/aggbug/36100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-03-19 21:05 <a href="http://www.blogjava.net/amplifier/archive/2006/03/19/36100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用未定义的Managed Bean导致错误并且无提示</title><link>http://www.blogjava.net/amplifier/archive/2006/03/18/35929.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Sat, 18 Mar 2006 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/03/18/35929.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/35929.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/03/18/35929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/35929.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/35929.html</trackback:ping><description><![CDATA[
		<p>在faces-config.xml里，把某个Bean的名字写成UncheckedRecord，在JSP页面里引用时却错误的使用了名字UncheckRecord来试图引用这个Bean，结果是达不到预期的效果，并且没有任何出错提示，调试了好久才发现这个问题。<br /><br />在JSP页面里通过EL引用的Managed Bean的名字并没有经过检查，如果引用了某个Bean的某个属性，而该属性并不存在时，才会有出错提示。</p>
<img src ="http://www.blogjava.net/amplifier/aggbug/35929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-03-18 13:50 <a href="http://www.blogjava.net/amplifier/archive/2006/03/18/35929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>试用 Sun Java Studio Creator 2 </title><link>http://www.blogjava.net/amplifier/archive/2006/02/25/32405.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Sat, 25 Feb 2006 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/02/25/32405.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/32405.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/02/25/32405.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/32405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/32405.html</trackback:ping><description><![CDATA[<P align=left>&nbsp;&nbsp;&nbsp; Sun的Java Studio Creator 2对SDN用户免费提供，听说是当前最好的JSF IDE了。<BR><BR>&nbsp;&nbsp;&nbsp; 官方的安装说明对硬件的要求是1GHz以上的CPU，1GB的内存。我的电脑只有512MB内存，CPU倒是有2.8GHz。不知道能否流畅运行。<BR>&nbsp;&nbsp;&nbsp; 下载了一个多语言版本回来，装上后是全中文的界面，连帮助都是中文。<BR>&nbsp;&nbsp;&nbsp; 整个IDE真的做得很专业，是所见即所得、拖放方式的设计，跟MyEclipse那种假的可视化编辑差得远了。Sun为这个IDE专门开发了很多JSF组件，在帮助中甚至建议开发者不要使用标准的JSF组件，因为很难用，而且它们都有替代的组件可用。那些非标准界面组件默认是ui作前缀的，拖放到页面上都是用了绝对定位（div 的 position:absolute 属性），就跟设计Windows桌面程序一样，这也是Sun推广JSF的本意。与标准组件不一样，所有的ui组件都有一定的风格，看起来很协调。当要用到数据表时，可以对每一列设置数据源，对应着数据库的某个表的某个列，这些都是可以可视化操作的，数据库的连接使用JNDI，要使用某个数据源，必须首先添加它的JNDI名字。<BR>&nbsp;&nbsp;&nbsp; 该IDE集成了Sun的应用服务器，按照帮助的说明，要调试一个Project，只要选择菜单中的“运行”就可以了，但我在测试过程中却发现默认的那个应用服务器根本就没有配置好，所以运行不了，自己配置的时候又失败了，所以只能把整个工程打包为war，再部署到Tomcat里调试。在Tomcat里还必须手动添加JSTL的两个包jstl.jar和standard.jar。由于是Sun自己的东西，所以在应用服务器的部署支持上不如MyEclipse广泛，Java Studio Creator 2只支持直接部署到Sun的应用服务器，部署到其他服务器必须先打包再部署，且不支持调试。又因为默认的应用服务器没有设置好，所以我到目前为止还不知道怎么调试。</P><img src ="http://www.blogjava.net/amplifier/aggbug/32405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-02-25 15:56 <a href="http://www.blogjava.net/amplifier/archive/2006/02/25/32405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>