??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日韩乱码中文无码蜜桃,亚洲国产精品人人做人人爱,九月婷婷亚洲综合在线http://www.tkk7.com/51AOP/something about Java and opensource!zh-cnSat, 10 May 2025 16:47:28 GMTSat, 10 May 2025 16:47:28 GMT60I'm Back !http://www.tkk7.com/51AOP/archive/2010/05/31/322378.html冰雨冰雨Mon, 31 May 2010 10:42:00 GMThttp://www.tkk7.com/51AOP/archive/2010/05/31/322378.htmlhttp://www.tkk7.com/51AOP/comments/322378.htmlhttp://www.tkk7.com/51AOP/archive/2010/05/31/322378.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/322378.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/322378.html阅读全文

冰雨 2010-05-31 18:42 发表评论
]]>
JDK 6 探秘?sh)? 自定义国际化(I18N)服务http://www.tkk7.com/51AOP/archive/2007/04/20/112168.html冰雨冰雨Fri, 20 Apr 2007 04:50:00 GMThttp://www.tkk7.com/51AOP/archive/2007/04/20/112168.htmlhttp://www.tkk7.com/51AOP/comments/112168.htmlhttp://www.tkk7.com/51AOP/archive/2007/04/20/112168.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/112168.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/112168.html阅读全文

冰雨 2007-04-20 12:50 发表评论
]]>
Frails 介绍.http://www.tkk7.com/51AOP/archive/2006/11/17/81778.html冰雨冰雨Fri, 17 Nov 2006 08:14:00 GMThttp://www.tkk7.com/51AOP/archive/2006/11/17/81778.htmlhttp://www.tkk7.com/51AOP/comments/81778.htmlhttp://www.tkk7.com/51AOP/archive/2006/11/17/81778.html#Feedback3http://www.tkk7.com/51AOP/comments/commentRss/81778.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/81778.html
但是有些时候JSF的用还是不是十分方? 其是对于初学者而言, 常常被一些莫明其妙的问题搞得晕头转向.
怿很多初学者都见到q这个Exception?

严重: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Cannot find FacesContext

当我在学?fn)JSF的时?看到q个Exception我找?jin)半天都没有发现我的代码哪里错?jin)(代码不可能出?因ؓ(f)是直接copy的书中的源代?呵呵), 后来不经意间才发现原来访问页面的URL错了(jin), 在JSF配置文g中配|的servlet映射?jsf,所以访问的URL应该?.... index.jsf, 而不?... index.jsp., p么一点疏忽就让h白忙zM(jin)半天. 郁闷?

随着学习(fn)的深?q种基本错误是很再出现?q出现也可以马上知道问题的Ҏ(gu)), 但是JSF其他的一些限制又是让人感到很郁闷? 比如 Form数据的提? JSF规范中ؓ(f)?jin)维护服务端的组件?wi) 只能使用Post提交, 而不可以使用Get. 而GetҎ(gu)在很多地方还是非常有用的.

另外q有Faces API使用h不是十分直接的问? 要把一个数据放入到session中就要一大串的操? FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(name, val); ),让h感觉很不?

....

如果你经帔R到这些问? 那么现在我将告诉你一个好消息, 有了(jin)Frails q些问题都可以轻而易丄解决?

我们先来看看Frails是什?

在Frails主页上定?http://frails.hexiao.cn/what-is-frails.html

what is frails?

Frails 是基于JSF上的一个开发效率和RoR可以向媲的JavaEE框架 !

Ruby On Rails(RoR)因ؓ(f)在开发webE序的高效性而风行一?可能现在仍然很热), 那些RoR的支持者说, RoR可以比java的开发效率高?0倍以?我们Ҏ(gu)观点持怀疑的态度. 我们怿,如果有正的开发方法来支持现在的Java web framework,?Java web开发的效率 不会(x)如此的低?所?我们研究?jin)一下RoR的实现机?来实现我们Java框架中的RoR. 因此, 我们提供一个在开发效率上和RoR可以媲美的JavaEE开发框?-- Frails !

知道?jin)Frails是什么后, 我们再来看看Frails有什么特? 能给JSF带来什么功能上的增?


在Frails主页上列举了(jin)Frails的如下主要特? http://frails.hexiao.cn/frails-features.html

Frails(Java Server Faces On Rails)ZJava Server Faces (JSF),q将提供?Hibernate和Spring的支? 主要特征如下:

Frails 让开发者用约??fn)?和注?annotations)来省略在 faces-config.xml 文g?managed-bean ?navigation-rule的配|?
Frails 提供一个更单的Ҏ(gu)来?Faces API.
Frails 重定向非 faces hZ?faces h,q样可以避免因ؓ(f)URL输入的疏忽导致的异常.
Frails 提供一些预定义?Managed Bean 基类让开发者扩?.
Frails 可以让开发者在 Managed Bean 中用注?Annotation)来支持AOP功能 ,?函数拦截(method interception).
Frails 提供 Managed Bean 属性的injection ?outjection
Frails 中的Hibernate GenericDao 对象提供?jin)基本?CRUD 函数 ?其他一些有?常用)的数据访问函?
Frails q提供了(jin)一些有用的注解(annotations)来简化JSF的开?
Frails 完全支持 jsf 1.1 ?jsf 1.2 规范,q且可以自动的探你使用的版?
Frails 提供?jin)对action Method ?Listener 函数的增?在这些函C现在你可以传递参C(jin).


知道q这么多Frails的东? 那么你不要?如何使用Frails?

q个是很单的.  (tng) 你只需要在web.xml文g中添加下面的配置:

<filter>
<filter-name>FacesFilter</filter-name>
<filter-class>net.sf.frails.filters.FacesFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FacesFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


然后把你下蝲的frails4jsf1.X.jar 攑ֈc\径中可以用了(jin).

现在可以使用? 你不要? 如果在用过E中我遇C(jin)问题, 要到哪里得到帮助?如果我有好的Frails改进要到哪里提议?
关于frails的服务问? 你可以到JavaCafe http://www.hexiao.cn/jsf/ 论坛的Frails专区中取得帮?

ok, q次Frails 介就先到q里, 希望Frails能在你开发Java web app时给你带来一丝清?


资源:

Frails英文主页 http://frails.sf.net
Frails中文主页 http://frails.hexiao.cn
Frails中文论坛 http://www.hexiao.cn/jsf



冰雨 2006-11-17 16:14 发表评论
]]>
关于maven2eclipse plugin的错误解军_?/title><link>http://www.tkk7.com/51AOP/archive/2006/10/19/76142.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Thu, 19 Oct 2006 05:12:00 GMT</pubDate><guid>http://www.tkk7.com/51AOP/archive/2006/10/19/76142.html</guid><wfw:comment>http://www.tkk7.com/51AOP/comments/76142.html</wfw:comment><comments>http://www.tkk7.com/51AOP/archive/2006/10/19/76142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/51AOP/comments/commentRss/76142.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/51AOP/services/trackbacks/76142.html</trackback:ping><description><![CDATA[在直接安?在线or手动) m2plugin 0.0.6以上时? 打开Maven2的?b class="highlight">Preferences</b> page <b class="highlight">׃(x)出现下面的错?br /></b><span><br />"<b class="highlight">Unable</b><b class="highlight">to</b> create the selected preference page </span><br /><span>Reason: </span><br /><span><b class="highlight">Plug</b>-<b class="highlight">in</b><b class="highlight">org</b>.<b class="highlight"><a title="Apache Maven tools " target="_blank">Maven</a></b>.<b class="highlight">ide</b>.<b class="highlight">eclipse</b><b class="highlight">was</b><b class="highlight">unable</b><b class="highlight">to</b><b class="highlight">load</b><b class="highlight">class</b></span><br /><span><b class="highlight">org</b>.<b class="highlight">maven</b>.<b class="highlight">ide</b>.<b class="highlight">eclipse</b>.<b class="highlight">preferences</b>.<b class="highlight">Maven2PreferencePage</b>" <br /></span><br /><br /><br />l过多方查找资料发现, 先安?.0.5 然后升񔞮可以解册问题?sh)?<br /><br />不知道ؓ(f)什么要q么ȝ(ch), <br /><br /><br /><img src ="http://www.tkk7.com/51AOP/aggbug/76142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/51AOP/" target="_blank">冰雨</a> 2006-10-19 13:12 <a href="http://www.tkk7.com/51AOP/archive/2006/10/19/76142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX支持的自动填充表?/title><link>http://www.tkk7.com/51AOP/archive/2006/09/26/71893.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Tue, 26 Sep 2006 01:41:00 GMT</pubDate><guid>http://www.tkk7.com/51AOP/archive/2006/09/26/71893.html</guid><wfw:comment>http://www.tkk7.com/51AOP/comments/71893.html</wfw:comment><comments>http://www.tkk7.com/51AOP/archive/2006/09/26/71893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/51AOP/comments/commentRss/71893.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/51AOP/services/trackbacks/71893.html</trackback:ping><description><![CDATA[<p>前几?在这?a >https://bpcatalog.dev.java.net/nonav/ajax/textfield-jsf/design.html</a> (tng)看到?jin)一个实现AJAX支持的自动填充表? 使用q种方式可以改善用户体验, 举个例子: 在填写用户信息的时?要填写用L(fng)c诏, 在全国有q么省市(jng)和地?要是仅仅提供一个下拉菜单来选择, 在这么多选项中选择是否很郁闷呢, 如果也可以让用户输入一部分文字 然后弹出相关的选项q样不是更好?用户使用更方? </p> <p>上面的文章介l的比较详细, 也是jsf的一个ajax扩展目, 其实对于使用myfaces的用h说还有个更的选择:使用<strong>MyFaces Sandbox 中的 (tng)I(yng)nputSuggestAjax</strong> (tng) (tng) </p> <p> <a >http://myfaces.apache.org/sandbox/inputSuggestAjax.html</a> (tng)</p> <p>用法如下:</p> <p>1.创徏一个managed bean: </p> <p>package test;</p> <p>import java.util.ArrayList;</p> <p>import java.util.List;</p> <p>public class Bean { (tng) (tng) (tng) (tng) </p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //In that function all what you had to do is to</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //Specify what will be displayed in the list</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //Note that the keyword is the text entered by the user</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) public List getSuggestedWords(String keyword) {</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) List list = new ArrayList();</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) list.add(keyword + " Ahmed Saleh");</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) list.add(keyword + " Kahki");</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) list.add(keyword + " Kourany");</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) list.add(keyword + " Kiki");</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) list.add(keyword + " Saleh Abouetta");</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) list.add(keyword + " Hashim");</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return list;</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) public String getCurrentValue() {</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return currentValue;</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) public void setCurrentValue(String currentValue) {</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.currentValue = currentValue;</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) String currentValue;</p> <p>}</p> <p>2. (tng) (tng) (tng) (tng) jsp 面代码</p> <p><%@ taglib uri="<a prefix="h" %></p> <p><%@ taglib uri="<a prefix="f" %></p> <p><%@ taglib uri="<a prefix="s" %></p> <p><html></p> <p><head></p> <p><title>Ajax JSF sample (InputSuggestAjax)</title></p> <p></head></p> <p><body></p> <p><f:view></p> <p> (tng)<h:form></p> <p> (tng) <h:outputText value="Enter your name : "/></p> <p> (tng) (tng) <s:inputSuggestAjax suggestedItemsMethod="#{bean.getSuggestedWords}" </p> <p> (tng) (tng) (tng) value="#{bean.currentValue}" /></p> <p> (tng) (tng) <br /></p> <p> (tng) (tng) <h:commandButton action="" value="Submit"/></p> <p> (tng) (tng) <br /></p> <p> (tng) (tng) <h:outputText value="Your name is #{bean.currentValue}"/></p> <p> (tng)</h:form></p> <p></f:view></p> <p></body> (tng) (tng) (tng) (tng) </p> <p></html> (tng) </p> <p> (tng)3. (tng) web.xml配置</p> <p><context-param></p> <p> (tng) <param-name>javax.faces.STATE_SAVING_METHOD</param-name></p> <p> (tng) <param-value>client</param-value></p> <p></context-param></p> <p>//Instead of server make the state saving method on the client to make it works</p> <p> (tng)4. 输出面:</p> <div align="left" forimg="1"> <a target="_blank"> <img class="blogimg" src="http://hiphotos.baidu.com/jsfcn/abpic/item/9325da43a19e551372f05de1.jpg" border="0" small="1" /> </a> </div> <p>版本为? (tng)1.1.4 CZ代码提供<a target="_blank">Hazem</a> (tng)<a >http://bbs.hexiao.cn/</a> (tng)</p><img src ="http://www.tkk7.com/51AOP/aggbug/71893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/51AOP/" target="_blank">冰雨</a> 2006-09-26 09:41 <a href="http://www.tkk7.com/51AOP/archive/2006/09/26/71893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 问题: Cannot serialize session attribute XXX for ..的解军_?/title><link>http://www.tkk7.com/51AOP/archive/2006/09/25/71662.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Mon, 25 Sep 2006 02:15:00 GMT</pubDate><guid>http://www.tkk7.com/51AOP/archive/2006/09/25/71662.html</guid><wfw:comment>http://www.tkk7.com/51AOP/comments/71662.html</wfw:comment><comments>http://www.tkk7.com/51AOP/archive/2006/09/25/71662.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.tkk7.com/51AOP/comments/commentRss/71662.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/51AOP/services/trackbacks/71662.html</trackback:ping><description><![CDATA[<p>在关闭和重启Tomcat 5? tomcat ?x)试?serialize存在的session资源. 如果 (tng)sessions中相关的对象没有实现 (tng)serializable 接口, ׃(x)出现Cannot serialize session attribute XXX (tng) for (tng) 异常.</p> <p>如果你不想看到该异常, 也不想保存session. 那么你可以在目部v描述文g?? test.xml,)(instead of just exploding the war) (tng) ? (tng)<Context> tags中间 加上 (tng):<br /><Manager className="org.apache.catalina.session.PersistentManager" <br />saveOnRestart="false"/><br />q样 tomcat 在关闭的时候就不会(x)保存session资源?</p> <p> <br />你也可以在server.xml中指定上面的? q也所有的E序都用这个设|了(jin).</p> <p> (tng)</p> <p>试试? </p><img src ="http://www.tkk7.com/51AOP/aggbug/71662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/51AOP/" target="_blank">冰雨</a> 2006-09-25 10:15 <a href="http://www.tkk7.com/51AOP/archive/2006/09/25/71662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用G4JSF集成 Google Web Toolkit ?JSF(3)http://www.tkk7.com/51AOP/archive/2006/09/07/68165.html冰雨冰雨Thu, 07 Sep 2006 00:32:00 GMThttp://www.tkk7.com/51AOP/archive/2006/09/07/68165.htmlhttp://www.tkk7.com/51AOP/comments/68165.htmlhttp://www.tkk7.com/51AOP/archive/2006/09/07/68165.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/68165.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/68165.html原文:http://www.theserverside.com/tt/articles/article.tss?l=GWTandJSF

译:icess http://blog.matrix.org.cn/page/icess (tng)讨论

AJAX, AJAX, AJAX

如果你听说过 (tng)GWT,那么你一定也听说q它的一个核?j)特性就?AJAX (tng)支持.?GWT? the "X" part,在客L(fng)和服务器端来回传递数? 该功能是通过RPC (Remote Procedure Call) 机制实现的而不是?XMLHttpRequest object.

不管q些,你想在服务器端做什么是有你军_? GoogleU它?Server Agnostic".

让我们看看如何添?AJAX (tng)方式的异步通信到我们的E序?

Asynchronous Communication in Hosted Mode

在下个阶D中,我们改变该E序的环?我们d一个用户可以输入姓名的文本?一旦按钮被点击?h会(x)发送到服务器端.服务器将q回出现在弹出窗口的消息.Z(jin)跟踪h和响?我们d一个文本标{来昄h的状?

Z(jin)在服务器和客L(fng)传送数?我们使用两个Java beans.  (tng)–?tng)一个把数据带回服务器端,一个把响应带回客户? .

Client-Side Coding

28. (tng)在JavaSource中创Z?demo.gwt.client.EventData c?内容如下:

package demo.gwt.client;

import org.ajax4jsf.gwt.client.GwtFacesEvent;

public class EventData extends GwtFacesEvent {
String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

用来在客L(fng)到服务器端传送数据的c?发送事?应该l承 G4jsf的?tng)GwtFacesEventc?

29. (tng)创徏另外一个类 demo.gwt.client.ResultGreeting.

内容如下:

package demo.gwt.client;

import org.ajax4jsf.gwt.client.GwtFacesResult;

public class ResultGreeting extends GwtFacesResult {
String greetingText;

public String getGreetingText() {
return this.greetingText;
}

public void setGreetingText(String greetingText) {
this.greetingText = greetingText;
}
}
 (tng)

从服务器端带来响应的cd该承G4jsf?GwtFacesResult c?

 (tng)GwtFacesEvent 和GwtFacesResult 都实C(jin)  (tng)com.google.gwt.user.client.rpc.IsSerializable 接口,用来序列化在客户端和服务器端传递的被GWT使用的数?

让我们更新我们的widget c?

30. 打开demo.gwt.client.HelloWidgetEntryPoint 使用下面代码替换?

package demo.gwt.client;

import java.util.Map;

import org.ajax4jsf.gwt.client.ComponentEntryPoint;
import org.ajax4jsf.gwt.client.GwtFacesServiceAsync;

import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class HelloWidgetEntryPoint extends ComponentEntryPoint {
Label status;
TextBox input;
protected Widget createWidget(final String id) {

Map m = getWidgetParams(id);
final String buttonLabel = (String) m.get("buttonLabel");


HorizontalPanel panel = new HorizontalPanel();


input = new TextBox();
status = new Label("Loaded.");

final GwtFacesServiceAsync service = createFacesService(id);

final AsyncCallback callback = new AsyncCallback() {
public void onSuccess(Object result) {
if (null != result) {
status.setText("Loaded");
String greeting = (tng) ((ResultGreeting)result).getGreetingText();
Window.alert(greeting);
} else {
status.setText("Request finished, but the result is empty");
}
}

public void onFailure(Throwable caught) {
status.setText("Error call :" + caught.getMessage());
}
};
Button btn = new Button(buttonLabel, new ClickListener() {
public void onClick(Widget sender) {
EventData eventData = new EventData();
eventData.setName(input.getText());
service.sendEvent(eventData, callback);
status.setText("Loading..."); (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) }
});


panel.add(input);
panel.add(btn);
panel.add(status);
return panel;
}
}

q里?个重要的部分.1.lg的布局.我们创徏?jin)一个水q面?然后d?jin)一个input box,button,和text label.

2.声明?jin)异步服务和事g,它承至异步模型的AJAXh.

...
final GwtFacesServiceAsync service = createFacesService(id);
...
Button btn = new Button(buttonLabel, new ClickListener() {
public void onClick(Widget sender) {
EventData eventData = new EventData();
eventData.setName(input.getText());
service.sendEvent(eventData, callback);
status.setText("Loading..."); (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) }
});
...
:

 (tng)

我们dClickListener 到button? ?On Click 事g发生?我们创徏q且使用输入的数据填? (tng)EventData bean (tng)然后使用异步服务发送该事g.在代码的l后一?我们讄text label的文本ؓ(f) "Loading?,因此? (tng)AJAX request 开始的时?用户可以看到变化 .

3.发送事?我们注册?jin)一个回调函? (tng)

.........
.........
final AsyncCallback callback = new AsyncCallback() {
public void onSuccess(Object result) {
if (null != result) {
status.setText("Loaded");
String greeting = (tng) ((ResultGreeting)result).getGreetingText();
Window.alert(greeting);
} else {
status.setText("Request finished, but the result is empty");
}
}

public void onFailure(Throwable caught) {
status.setText("Error call :" + caught.getMessage());
}
};
...........
...........

Callback ?Google toolkit中AsyncCallback (tng) cȝ一个接?我们实现?jin)两个方?onSucess and onFailure. 在onSuccess情况? 我们d?jin)一个附加的(g)到来的l果.如果我们没有受到一个期望的c?我们标记在状态文本中. (tng)

现在我们完成?jin)客L(fng)的代?如果你? (tng)Hosted Mode (with the "ant shell" command)来启动程? (tng)你将看到 "Request finished, but the result is empty", 因ؓ(f)我们q没有写服务器端代码.

Server-Side Coding

在Hosted Mode中的服务器端代码, 在server包中的一个类扮演?jin)一个重要角?

31. 打开JavaSource中的demo.gwt.server.MockHelloWidget java 文g.

 (tng)sendEvent 函数复杂发送响应到客户?

32. 把sendEvent函数替换Z面的内容.:

public GwtFacesResult sendEvent(GwtFacesEvent event){

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) ResultGreeting result = new ResultGreeting();
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) result.setGreetingText( "Hello " +
((EventData)event).getName() );
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return result;
}
 (tng)

33. 导入需要的c?

import demo.gwt.client.ResultGreeting;
import demo.gwt.client.EventData;

The parameter of the method points to the event content that came from the client. What we do here is create the Result bean filling it with a greeting message and then returning.

34.在Hosted Mode中启动ant:

Adding JSF Listeners for Run-Time Mode

处理JSF的事件和Hosted Mode的代码差不多. 客户端代码不?在服务器?, (tng)G4jsf使用 JSF (tng)监听器机制来处理 Ajax events.

35. (tng)打开 WebContent/pages/Base.xhtmlq添加监听器lg声明.

<widget:component id="main" buttonLabel="#{bundle.buttonLabel}"
greeting="Hello #{greetingBean.name}!" >
 (tng) (tng) <gwt:gwtListener method="#{greetingBean.takeGreeting}"
 (tng) (tng) event ="demo.gwt.client.EventData"/>
</widget:component>
 (tng)

 (tng) (tng)gwtListener 元素有两个属? "method"使用JSFEL指向处理?"event"用来定义事gcd. (tng)事gcd是类的全限定?.最后一步是实现该函?

36. 打开demo.gwt.app.GreetingBeand下面的代?

public ResultGreeting takeGreeting(EventData event) {
name = event.getName();
ResultGreeting result = new ResultGreeting();
result.setGreetingText("Hello " + name + " from JSF!");
return result;
}
 (tng)

37. 和需要导入的c?

import demo.gwt.client.ResultGreeting;
import demo.gwt.client.EventData;

该函数的{֐(signature (tng) )很容易记?该函C用来自于客户端的事g作ؓ(f)他的唯一一个参?q回gؓ(f) 用来q回l果的事件类?type of the method equals is just the type of the class used to return the result).在这个函C,我们合成响应数据q且q回?

38. 创徏war文g,部v?

如果你启动服务器,可以看导:

The Last Word

如你看到的,通过G4JSF使用两种互补的技?GWT and JSF)可以做很多漂亮的事情. 但是,仍然q有很多东西可以q一步添加到G4jsf?作ؓ(f)一个开源项? , G4jsf依靠一个开源社区来支持和开发它.如果你只是用它,那是很好?但是你也可以加入到G4JSFC֌中来, 帮助G4JSF让他做的更好.  (tng)Come visit us at:

https://ajax4jsf.dev.java.net

About the Author

Sergey Smirnov is Senior Product Manager at Exadel where he oversees the development of major products including Exadel Visual Components Platform and Exadel Studio. He has more than 15 years of in-depth development experience, primarily in the area of Web applications. His experience with JSF goes back to the very early days. For two years, he has served as a member of the JSF expert group. In addition to this, he manages a site for JSF-related resources, www.jsftutorials.net. Finally, Sergey is the co-lead of the open source project Ajax4jsf (https://ajax4jsf.dev.java.net). He can be reached at ssmirnov@exadel.com.



冰雨 2006-09-07 08:32 发表评论
]]>
使用G4JSF集成 Google Web Toolkit ?JSF(2)http://www.tkk7.com/51AOP/archive/2006/09/07/68163.html冰雨冰雨Thu, 07 Sep 2006 00:31:00 GMThttp://www.tkk7.com/51AOP/archive/2006/09/07/68163.htmlhttp://www.tkk7.com/51AOP/comments/68163.htmlhttp://www.tkk7.com/51AOP/archive/2006/09/07/68163.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/68163.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/68163.html原文:http://www.theserverside.com/tt/articles/article.tss?l=GWTandJSF

译:icess http://blog.matrix.org.cn/page/icess (tng)讨论

 (tng)

使用更多的动态文?/h2>

在我们应用程序的W一个版本中,我们编码标{֭W到E序?在下一个版本中,我们保持该文本与java代码分离.

GWT Parameters in Hosted Mode

一U方式是使用GWT来定义label 和message.

13. 打开demo.gwt.client.HelloWidgetEntryPoint.java 文g用下面的代码替换createWidget Ҏ(gu).

protected Widget createWidget(final String id) {
Map m = getWidgetParams(id);
final String buttonLabel = (String) m.get("buttonLabel");
final String greeting = (String) m.get("greeting");

Button btn = new Button(buttonLabel, new ClickListener() {
public void onClick(Widget sender) {
 (tng) (tng) (tng) (tng) (tng) Window.alert(greeting);
 (tng) (tng) (tng) (tng) (tng) }
});

return btn;
}
 (tng)

14. 保存文g.

15. (tng)打开 JavaSource\demo\gwt\public\index.html 文g.

该文件已l包含了(jin)一个如何定义参数的CZ,我们只需要修改一下就可以? :

16. 修改为如下的代码:

<html>
<head>
<meta name="gwt:module" content="demo.gwt.HelloWidget">
<meta name="gwt:property" content="viewid=hello">
<meta name="gwt:property" content="action=/gwtFacesServlet">
<title>gwt-jsf integration</title>
</head>
<body bgcolor="white">
<script language="javascript" src="gwt.js"></script>
<iframe id="__gwt_historyFrame"
style="width:0;height:0;border:0"></iframe>

<span id="_id1" class="demo.gwt.HelloWidget">
<span id="_id1:_data" style="display:none;">
<span (tng) title="buttonLabel">Say Hello</span>
<span (tng) title="greeting">Hello GWT!</span>
</span>
<input type="hidden" id="javax.faces.ViewState"
name="javax.faces.ViewState" value="_id0:_id0" />
</span>

</body>
</html>

17. (tng)?Hosted Mode 中启动ant:

然?如果你想创徏一个war文g,然后部v?你将看不到相同的l果.q是因ؓ(f) public/index.html仅仅在Hosted Mode中其作用.?Run-Time Mode,我们需要?JSF page.

Using JSF Expression Language (EL) in Run-Time Mode

看一下WebContent\pages\Base.xhtml文g.它包含如下代? (tng)

<widget:component id="main" (tng) />

q实际上是一个GWT widget 的?tng)JSF 包装.

18. 定义lg?buttonLabel" ?greeting" 参数 :

<widget:component id="main" (tng) buttonLabel ="Click Me!"
greeting="Hello, GWT and JSF"/>

19. 在Run-Time Mode中运行该目.

看看l果. 然而这是不是太单了(jin), 下面来看看如何? (tng)JSF EL来它更动态一?

20.现在关闭XHTML (tng)文g.

 (tng)

Adding a Resource File

21. 在JavaSource (tng) 文g夹下创徏demo/gwt/app/bundle/Labels.properties文g,包含下面的内?

#
buttonLabel=Say Hello!
 (tng)

Adding a Managed Bean

22. 在JavaSource中创Z个类demo.gwt.app.GreetingBean (tng) .使用下面的代?

package demo.gwt.app;

public class GreetingBean {
String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

23. 在WEB-INF/faces-context.xml 中注册该bean.

The faces-context.xml should contain

:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.
//DTD JavaServer Faces Config 1.1//EN"
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>

<managed-bean>
 (tng) <managed-bean-name>greetingBean</managed-bean-name>
 (tng) <managed-bean-class>demo.gwt.app.GreetingBean</managed-bean-class>
 (tng) <managed-bean-scope>session</managed-bean-scope>
 (tng) <managed-property>
 (tng) (tng) <property-name>name</property-name>
 (tng) (tng) <property-class>java.lang.String</property-class>
 (tng) (tng) <value>GWT and JSF</value>
 (tng) </managed-property>
</managed-bean>


 (tng) <application>
 (tng) <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
</faces-config>
 (tng)

Finishing Up

要让EL工作.我们要在lgcMd属性到属性map?

24. 打开demo.gwt.jsf.UIHelloWidget, (tng)扑ֈ getWidgetParameters() Ҏ(gu),使用下面的代码替?

public Map getWidgetParameters() {
HashMap params = new HashMap();
params.put("greeting",getAttributes().get("greeting"));
params.put("buttonLabel",getAttributes().get("buttonLabel"));
return params;
}

25. d下面的import语句:

import java.util.HashMap;

现在回到 (tng)pages/Base.xhtml文g?

26. 把资源声明放到该文g的顶?

<f:loadBundle basename="demo.gwt.app.bundle.Labels" var="bundle"/>

27. 修改widget:component的属?  (tng)

<widget:component id="main" buttonLabel ="#{bundle.buttonLabel}"
greeting="Hello #{greetingBean.name}!" />

 (tng) (tng) (tng)

 (tng)

现在两个属性都通过el来生了(jin),一个来自于 bundle resource file, 一个来自于 backing bean.

如果你创?部v,启动该程?你可以看到该E序现在使用的按钮标{了(jin):

OK,我们已经在JSF环境中参数化?jin)GWT widget的数? 因此你可以用同L(fng)Ҏ(gu)用数据初始化? (tng)widget (tng) .然而目前这一切看h想一张单ER? one-way ticket).我们q没有提C个非帔R要的斚w .



冰雨 2006-09-07 08:31 发表评论
]]>
使用G4JSF集成 Google Web Toolkit ?JSF(1)http://www.tkk7.com/51AOP/archive/2006/09/06/68081.html冰雨冰雨Wed, 06 Sep 2006 09:51:00 GMThttp://www.tkk7.com/51AOP/archive/2006/09/06/68081.htmlhttp://www.tkk7.com/51AOP/comments/68081.htmlhttp://www.tkk7.com/51AOP/archive/2006/09/06/68081.html#Feedback1http://www.tkk7.com/51AOP/comments/commentRss/68081.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/68081.html原文:http://www.theserverside.com/tt/articles/article.tss?l=GWTandJSF

译:icess http://blog.matrix.org.cn/page/icess (tng) 讨论

Google Web Toolkit (GWT) 吸引?jin)一些开发者的注意.因ؓ(f)使用它你可以很容易的dAJAX Web 2.0功能C的程序中. GWT的设计师努力隔绝用户和JavaScript打交?你只要用GWT可以了(jin),不需要知道如何用JS. GWT 通过从java代码来生JS代码的\方式 实现?jin)创建高U客L(fng)JS组?client-side JavaScript widgets)的Q?

与此同时, JavaServer Faces (JSF)聚集?jin)愈来愈多的成?f)通用服务端web框架的要?JSF成功的主要原因是:自顶向下的基于组件的方式来开发webE序. 同时JSF带有自己标准的随时可?out-of-the-box)的UIlg , 它被设计为简单的包含其他lg?it is designed for the easy inclusion of other component libraries).

然?q两Ҏ(gu)术是不可思议的他们自己L(fng),他们两个怺l合的非常好(怺互补). GWT (tng)不知道服务端的状? server-side-agnostic),然?JSF'sZlg的结构可以很Ҏ(gu)的适应Mlg的渲?在这文章中,我们讨?(首先通过一个step-by-step 的例?一个促(j)q这两个技术互补的新框?

 (tng) (tng)G4jsf 已经成ؓ(f)Ajax4jsf开源项目的一个子目?(https://ajax4sf.dev.java.net) ,有它来生这U集成库.

GWT和JSF之间看v来是怺竞争的技?而用G4JSF则看h是很自然的互补技?而G4JSF的Q务就是ɘq种互补关系的技术看h更自然一?

关于G4jsf

库文件包含两个部?

  •  (tng) (tng)G4jsflg开发包( Component Developer Kit)包含 目骨架产生?
  • 一个?strong>run-time library 提供在GWT widgets和JSF环境之间的过渡作?

G4jsf 注意?jin)JSF ?GWT 两种技术的发展q程\.对于 GWT,  (tng)widgets仍然在主机模型中开?q且在?Google browser来调?  (tng)GWT (tng)目l构包含 /client, /public, (tng)?/server ? q且q在l箋l护.

 (tng)G4jsf lg开发包(G4jsf CDK)产生的组件包含两个部?一?包含客户端行为的GWT widget (tng).二是负责 GWT widget (tng)?JSF 环境之间的通信问题.

G4jsf CDK 使用Facelets方式来写JSFlg. 它比不同的JSP方式要简? 使用普通的方式要创Z个TLD文g和一个Tagc?使用Facelets的方式是相当直接?

CZE序 (tng)

在这文章中,我们一步一步的通过一个简单的"Hello, World" (tng)例子来讲qG4JSF的主要功?我们也创Z个实际的例子,a4j-gwtdemo. (tng)在这?http://livedemo.exadel.com/a4j-gwtdemo/ (tng)可以看到该例?

你可以从Ajax4jsfCZ面上下载到CZ的源代码和war部v文g .?/font>http://code.google.com/webtoolkit/download.html.

2. 保存GWT SDK (tng) .

3. 把G4JSF CDK中的 (tng) (tng)build.properties.sample (tng)重命名ؓ(f) build.properties,打开?把gwt.home改ؓ(f)你的本地GWT ȝ?

例如,你把 Google Web Toolkit SDK 解压?
gwt.home=D:/gwt-windows-1.1.0

4. ~辑,保存文g

初始化工作已l做好了(jin),下面来生项目框?

产生一个项目框架?/h2>

在刚才的目录下的build文g中有?"create-component" target. 它需要俩个运行参?

out

产生的项目代码文件存攄目录.路径的最后一部分为项目的名字

m odule

 (tng)GWT module的全限定? 产生的JSF lgcd有同样的名?

让我们命名模型ؓ(f) (tng)demo.gwt.HelloWidget 保存目的名字ؓ(f), KickStart, 在D:/workspace/ 文g夹下. (Of course, you can change any of these.)

5.使用下面的命令运行ant:

让我们来ȀzL们的目.我们在标准的GWT Hosted Mode中来看看效果,在下个部分中在servlet container?来允许该例子.

7.打开 JavaSource/demo/gwt/client/HelloWidgetEntryPoint.java文g.

它包含一个?tng)HelloWidgetEntryPoint c? 里面有个q回null的方?

8. 使用下面的代码替换该Ҏ(gu):

public class HelloWidgetEntryPoint extends ComponentEntryPoint {

 protected Widget createWidget(final String id) {
  
   Button btn = new Button("Click me", new ClickListener() {
        public void onClick(Widget sender) {
         Window.alert("Hello, World");
        }
  });
  
  return btn;
 }
} 

9. 保存文g,到ant文g夹下?

Hosted Mode

10. 使用shell目标启动ant:

 (tng) (tng)Google Toolkit Development shell ?Google browser 启动?在browser中显CZ(jin)我们刚才创徏的button.如果你点击button ,一个带问候消息的警告框出C(jin).

 (tng)Google browser包含一? (tng)"Compile/Browser" (tng)按钮.如果你点d,你可以在你默认的览器中查看该示?  (tng)

目前q没有Q何JSF代码搀合进?到此Z我们只是在?"Hosted Mode."你可以在该模式下开发和调试你的 GWT widget . 如果你已l有?jin)开发?tng)GWT的经验了(jin),那么你应该很熟?zhn)它?jin). G4jsf QDQ 的处理过E和q里是一L(fng).

Run-Time Mode

下一步是在JSF 环境中运行该CZ.

11.使用 "war" target启动ant:

q行该项?可以看到同L(fng)效果,但是q行在JSF环境中我们称它ؓ(f)  (tng)"Run-Time Mode."我们已经? (tng)GWT widget 包装为JSF lg?q才是集成的W一?

 (tng)

				讨论
		


冰雨 2006-09-06 17:51 发表评论
]]>替换c\径中的jar文g(在eclipse中升Ujar文g -- eclipse使用技?http://www.tkk7.com/51AOP/archive/2006/09/05/67802.html冰雨冰雨Tue, 05 Sep 2006 06:38:00 GMThttp://www.tkk7.com/51AOP/archive/2006/09/05/67802.htmlhttp://www.tkk7.com/51AOP/comments/67802.htmlhttp://www.tkk7.com/51AOP/archive/2006/09/05/67802.html#Feedback1http://www.tkk7.com/51AOP/comments/commentRss/67802.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/67802.htmlReplacing JARs on the Build Path (tng) -- Eclipse 技?/p>

from:R.J. Lorimer (tng)

在维护项目的一个普通的d是升库文?例如, 你在使用 commons-collections 在你的项目中,现在使用的是3.1,但是现在 3.2 发布? 你想使用? 所以你需要用新的jar来替换旧的jar库文?在eclipse3.2发布以前你需要做下面的几步来完成?:

  1. Copy 新的jar文gC的项目lib目录?
  2. 通过 (tng)操作[right-click project]->Properties...->Java Build Path->Libraries (tab)来删除类路径中的旧jar文g
  3. d新的jar文gC面的路径中?
  4. 如果需要的话还要?tng)重新命名类文g or 更新文g引用

q样做是很郁L(fng). 其是你使用一个用很多第三方jar文g的工h(?Hibernate,spring) 当你升q些目?你要做很多上面的改动. 是不是很无趣??

来看看Eclipse 3.2 l我们带来了(jin)什么吧.有一个新的特性叫 'Migrate JAR File',用来升jar文g.要用该功能,在要替换的jar文g上右?q入 Build Path 子菜单选择 'Migrate JAR file':

你会(x)看到下面的对话框:

如果你不走运也要Ҏ(gu)jar文g名的?保持原来的名字不?你可以选中那个复选框..

然后点击finish, 你将看到你的jar文g已经升?

情享受? http://bbs.hexiao.cn/ (tng)



冰雨 2006-09-05 14:38 发表评论
]]>
վ֩ģ壺 þþþþAVվ | гʮ·Ƶ| ȫëƬ߲| һ| ߾ƷaaaƬ| ƷѾþþþùһ| þһѲ| 97Ƶ| þùƷѹۿ| 99þþùƷ| 37pao˹Ƶ| Ƶվ߹ۿ| ߹ۿĶ | 91Ʒȫѹۿ߲| һ| 2019ĻƵ | һaƬþ| һƵ| Ů˽Ƶwww| ˾ƷѾþþþ| 99re6ƵƷѹۿ| 114һëƬ| ؼƬѸƵ| ղƷϵ| ղĻ| һĻþ| va߹ۿ| ëƬ߹ۿ| óav| ߹ۿƵ| ƬվŮ| ҹëƬ| ձ| þ޾ƷĻ| 91ۺ| һëƬ߲Ƶѹۿ | ޹Ƭ߹ۿ| þɫWWWŷ| þ99þóѲ| 91㽶߹ۿ| ƵƷ|