`
tailorcai
  • 浏览: 91620 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

我的第一个Ajax Wicket控件:Google Ajax Image Search (2)

阅读更多
今天,继续介绍我在尝试开发的Google Ajax Image Search控件。

为了允许用户保存自己选择的图片,Google Search API提供了一个Callback.因此,修改如下代码:
java 代码
 
  1. .append("function MyKeepHandler(result) {\n")  
  2. .append("\twicketAjaxPost('" + getCallbackUrl() + "','url='+wicketEncode(result.url)+'&tbUrl='+wicketEncode(result.tbUrl));\n")  
  3. .append("}")  
在这段代码中,利用Behavior提供的Callback机制,把js中用户选择的图片的url上传到Behavior。
相应的相应代码如下:

java 代码
 
  1. @Override  
  2. protected void respond(AjaxRequestTarget target) {  
  3.     RequestCycle requestCycle = RequestCycle.get();  
  4.     String tbUrl = requestCycle.getRequest().getParameter("tbUrl");  
  5.     String url = requestCycle.getRequest().getParameter("url");  
  6.   
  7.     onSelect( url , tbUrl , target );  
  8. }  
  9. protected abstract void onSelect(String url , String tbUrl , AjaxRequestTarget target);

这里,我引入了一个虚函数,onSelect。通过实现这个函数,页面可以对选择的图片信息进行进一步的处理。在这里,我们先在页面中加入一个列表区域,显示用户选择的所有图片:

首先修改新的GImageSearch的创建代码。
java 代码
 
  1. add( new GImageSearch("gsearch",null) {  
  2.     @Override  
  3.     protected void onSelect(String url, String tbUrl, AjaxRequestTarget target) {  
  4.         // store it some where?  
  5.         images.add( url );  
  6.         imageList.modelChanged();  
  7.         target.addComponent( container );  
  8.     }  
  9. });  

引入了两个变量
java 代码
 
  1. private List<string>    images = </string>new ArrayList<string>();  </string>
  2. private ListView        imageList;  

images保存历史图片。imageList则是一个用来显示list数据的wicket控件。

java 代码
 
  1. private WebMarkupContainer container;  
  2.   
  3.     container = new WebMarkupContainer("savedList-panel");  
  4.     add( container );  
  5.     container.setOutputMarkupId(true);  
  6.     container.add( imageList = new ListView("savedImage", images) {  
  7.   
  8.         @Override  
  9.         protected void populateItem(ListItem item) {  
  10.  
  11.             item.add( new StaticImage("image", item.getModel()));  
  12.         }  
  13.           
  14.     });  
  15.       

代码注释:
  1. 因为,当用户修改图片列表后,需要更新列表显示区域,这就是前面: target.add( container )的含义。通知wicket,本次ajax调用需要更新container对象。
  2. 对于需要ajax更新的对象,必须调用setOutputMarkupId(true)
  3. ListView是一个静态界面对象,重复Render的时候,不会再次访问它的model。因此,必须调用listview.modelChange()。也可以试用RefreshingView等动态repeater界面控件。不过代码会多些。
  4. 这里额外加入了一个container。开始的时候,我直接调用target.add( imageList ),但是得到一个错误提示,对于像listview这样的对象,只能更新他们的包含对象。因此,必须给他们一个通用的包含对象。
java 代码
 
  1. class StaticImage extends WebComponent {    
  2.   
  3.     public StaticImage(String id, IModel model) {    
  4.         super(id, model);    
  5.     }    
  6.   
  7.     protected void onComponentTag(ComponentTag tag) {    
  8.         checkComponentTag(tag, "img");    
  9.         tag.put("src", getModelObjectAsString());    
  10.     }    
  11.   
  12. }   

wicket 却省的Image是使用Resource作为url来源。这里copy了一个例子。http://cwiki.apache.org/WICKET/how-to-load-an-external-image.html

相应的HTML代码:

xml 代码
 
  1.  <body>  
  2.    <span wicket:id="gsearch" />  
  3. <div wicket:id="savedList-panel" >  
  4. <ul><li wicket:id="savedImage">  
  5. <img wicket:id="image" />  
  6. <!---->li><!---->ul>  
  7. <!---->div>  
  8.      
  9.  <!---->body>  

javaeye贴HTML代码有问题,一旦重复编辑就会乱掉!

现在可以看一下效果了。
分享到:
评论
2 楼 tailorcai 2007-07-30  
个人感觉javaeye的圈子似乎有些冷清。
我觉得可能跟javaeye即有圈子,又有论坛有关系。其实圈子就是论坛。可是如果论坛有,谁还到圈子来啊?建议取消论坛,大力发展圈子...
1 楼 fakechris 2007-07-30  
为啥不加入wicket的圈子,然后把这两篇文章放到圈子博客里呢

相关推荐

    wicket的ajax范例(级联选择框)

    wicket的ajax范例(级联选择框)

    Ajax-jaulp-wicket.zip

    Ajax-jaulp-wicket.zip,这个项目是ApacheWicket组件和实用程序的集合。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不...

    wicket常用控件使用方法

    Wicket开发和.Net很相似,在html页面中对控件做wicket的声明,然后在java代码中便可以生成一控件。控件的值或内容都以Model存放,所以当修改其值或内容时都是在修改Model中的对象,取值时只需要取到Model中对象再...

    wicket 基础知识培训

    wicket 基础知识培训,主要是讲解wicket入门知识,通过和struts比较来进行讲解。

    wicket基础控件

    wicket基础控件,生成的源码,比较小

    JapanCuccok:我的第一个Wicket项目在Google AppEngine上运行。 基本上是一个简单的网上商店

    我的第一个Wicket项目在Google AppEngine上运行。 基本上是一个简单的网上商店。 如果您有兴趣,请访问下面的链接,请: : 建立步骤: 先决条件:请确保您已安装以下程序。 还要确保您具有这些程序的完全相同的...

    Apache Wicket Cookbook.pdf

    Chapter 2: Getting Down and Dirty with Forms and Form Components 33 Introduction 33 Creating linked selectboxes 34 Composing multiple form components into a single reusable component 39 Preventing...

    wicket开发指南

    wicket开发指南,很简洁,可以看看,对于wicket框架的学习很有帮助

    Wicket

    NULL 博文链接:https://fengyunxiao.iteye.com/blog/684835

    wicket国际化例子

    wicket国际化例子 含有wicket:message StringResourceModel 等读取properties资源文件的代码示例

    wicket:Apache Wicket-基于组件的Java Web框架

    Apache Wicket是一个开源的,基于Java,基于组件的Web应用程序框架。 通过适当的标记/逻辑分离,POJO数据模型以及令人耳目一新的XML缺乏,Apache Wicket使开发Web应用程序变得简单而又愉快。 交换样板,复杂的调试...

    Wicket 8.X开发文档(中文翻译+英文原版)

    3.我为什么要学习Wicket? 3.1。我们都喜欢意大利面:-) ... 3.2。面向组件的框架 - 概述 3.3。面向组件的Web开发框架的优点 3.4。Wicket与其他面向组件的框架相比 威克特说“你好世界!” 4.1。Wicket分发和模块 4.2...

    wicket指南

    wicket开发指南,wicket 新型的web开发框架,现以能无逢支持jsr168/286

    Wicket开发指南.pdf

    Wicket开发指南 Wicket开发指南 Wicket开发指南

    《Wicket开发指南一书》PDF版本下载

    Wicket前生后世篇 Wicket是什么?简单点说,它就是一个基于...但是这个事件对我的第一感觉就是晕,第二感觉就是特别的晕,虽然目前Java世界的Web框架一通混战,但这样一个联盟,所给出的东西很可能是第二个EJB。

    wicket-js:wicket-js 使在 Wicket 组件和行为中编写和处理自定义 JavaScript 和 jQuery 变得容易

    它有助于将 Wicket Ajax Behavior 侦听器与实际客户端 UI 功能分开,同时保持与 Wicket 组件的耦合。 它提供了一个(基本的),允许您在 Java 中构建 JavaScript 和 jQuery 表达式。 例子 使用 wicket-js,您可以...

    wicket开发详解

    开发详解想写一份这样的Wicket 文档,源于2005 年中,那是用Wicket1.0 完成了第一个项目以 后的想法,觉得如此好的一个Web 框架,应该让更多的开发人员了解和使用它。因此在 05 年9 月份的时候开始了这份文档的初稿...

    wicket_examples:wicket_examples

    About Wicket About Basic Wicket Hello World from

    wicket文档

    wicket学习文档

    wicket 开发指南

    Wicket 目前最新的版本是1.2.2 版,已经支持了AJAX,但感觉这个框架的发展时间毕 竟还是短了一点,尽管设计思想很不错,但还是有许多问题存在的,包括控件的数量,BUG 较多等,希望2006 年它可以尽快的成熟起来。

Global site tag (gtag.js) - Google Analytics