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

本文介绍了如何使用Wicket框架开发一个带有图片保存功能的Google图片搜索应用。通过自定义GImageSearch组件,实现了图片的选择与保存,并展示了如何利用Ajax进行图片URL的传递及更新界面。
今天,继续介绍我在尝试开发的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代码有问题,一旦重复编辑就会乱掉!

现在可以看一下效果了。
基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)内容概要:本文档介绍了基于遗传算法的微电网调度模型,涵盖风能、太阳能、蓄电池和微型燃气轮机等多种能源形式,并通过Matlab代码实现系统优化调度。该模型旨在解决微电网中多能源协调运行的问题,优化能源分配,降低运行成本,提高可再生能源利用率,同时考虑系统稳定性与经济性。文中详细阐述了遗传算法在求解微电网多目标优化问题中的应用,包括编码方式、适应度函数设计、约束处理及算法流程,并提供了完整的仿真代码供复现与学习。此外,文档还列举了大量相关电力系统优化案例,如负荷预测、储能配置、潮流计算等,展示了广泛的应用背景和技术支撑。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能电网优化研究的工程技术人员。; 使用场景及目标:①学习遗传算法在微电网调度中的具体实现方法;②掌握多能源系统建模与优化调度的技术路线;③为科研项目、毕业设计或实际工程提供可复用的代码框架与算法参考; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注目标函数构建与约束条件处理,同时可参考文档中提供的其他优化案例进行拓展学习,以提升综合应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值