Webx Pulltoll分析

简介:

 

 
  1. <form action="$petstoreLoginLink" method="post"> 
  2.   <input type="hidden" name="action" value="LoginAction"/> 
  3.   <input type="hidden" name="return" value="$!rundata.parameters.return"/> 
  4.  
  5.   #set ($group = $form.login.defaultInstance) 
  6.  
  7.   …… 
  8.  
  9.   <input type="image" src="$homeContent.getURI("images/btn_login.png")" name="event_submit_do_login" /> 
  10.  
  11.   …… 
  12. </form> 

$petstoreLoginLink,$!rundata.parameters.return,$form.login.defaultInstance,$homeContent.getURI("images/btn_login.png")

他们是如何产生的呢?从pulltoll中注入过来的。哪些地方注入来的呢?看如下的pulltool配置:

 
  1. <!-- 定义在webx.xml中 --> 
  2.  
  3. <service name=“PullService” class=“com.alibaba.service.pull.DefaultPullService”> 
  4.  
  5.     <!-- 全局pull tools --> 
  6.     <property name="tool.global"> 
  7.         <property name="util" value="com.alibaba.service.pull.LangToolSet"/> 
  8.     </property> 
  9.  
  10.     <!-- 局部pull tools --> 
  11.     <property name="tool.request"> 
  12.         <property name="control" value="com.alibaba.turbine.util.template.ControlTool"/> 
  13.         <property name="control.sharing" value="false"/> 
  14.         <property name="form" value="com.alibaba.service.form.FormTool"/> 
  15.         <property name="form.sharing" value="false"/> 
  16.         <property name="page" value="com.alibaba.turbine.util.template.HtmlPageAttributeTool"/> 
  17.         <property name="page.sharing" value="true"/> 
  18.         <property name="rundata" value="com.alibaba.turbine.util.template.RunDataTool"/> 
  19.         <property name="rundata.sharing" value="true"/> 
  20.         <property name="uri" value="com.alibaba.service.uribroker.URIBrokerTool"/> 
  21.         <property name="uri.sharing" value="false"/> 
  22.     </property> 
  23.  
  24. </service> 

  在webx2中,要成为被vm中取得的pulltool,需要做到2件事情:一是实现pulltool接口,二是在xml中配置可以被velocity解析的pulltool类。

  pulltool接口,提供了web方向的实现类:WebxPullToolSupport等...,也提供了非web方向的实现类:CsrfToken等...。

2、自定义pulltool

方式1:webx2的方式,继承。

步骤1:继承自WebxPullToolSupport

 
  1. public class MyPullTool extends WebxPullToolSupport { 
  2.     /* 
  3.      * (non-Javadoc) 
  4.      * @see com.alibaba.service.pull.PullToolSupport#init() 
  5.      */ 
  6.     @Override 
  7.     protected Object init() throws PullException { 
  8.         System.out.println("MyPullTool init."); 
  9.         return super.init(); 
  10.     } 
  11.  
  12.     private String username = "zhangsan"
  13.  
  14.     /** 
  15.      * @return the username 
  16.      */ 
  17.     public String getUsername() { 
  18.         return username; 
  19.     } 
  20.  
  21.     /** 
  22.      * @param username the username to set 
  23.      */ 
  24.     public void setUsername(String username) { 
  25.         this.username = username; 
  26.     } 

步骤2:在webx.xml中配置

 
  1. <!-- 将beans暴露给模板。这里定义的tools可被所有components之间共享。 --> 
  2.     <services:pull xmlns="http://www.alibaba.com/schema/services/pull/factories"> 
  3.         <utils /> 
  4.         <page-tool /> 
  5.         <control-tool /> 
  6.         <uris-tool /> 
  7.  
  8.         <webx2-tool id="unicornTool" 
  9.             class="com.alibaba.intl.web.unicorn.pull.UnicornPullTool" scope="request" /> 
  10.          
  11.         <webx2-tool id="myPullTool" class="com.alibaba.sample.petstore.sample.pulltool.MyPullTool" scope="request"/> 
  12.     </services:pull> 

步骤3:在页面中引用

 
  1. username: $myPullTool.username 

 

 本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/687288,如需转载请自行联系原作者

相关文章
|
Java Spring
从@Async案例找到Spring框架的bug:exposeProxy=true不生效原因大剖析+最佳解决方案【享学Spring】(上)
从@Async案例找到Spring框架的bug:exposeProxy=true不生效原因大剖析+最佳解决方案【享学Spring】(上)
|
7月前
|
XML JSON Java
SpringMVC原理分析 | Controller配置、RestFul风格
SpringMVC原理分析 | Controller配置、RestFul风格
86 0
|
Java 应用服务中间件 Apache
webservice开发不得不知的细节,Error creating bean with name ‘org.apache.cxf.jaxws.EndpointImpl---1987203924‘
webservice开发不得不知的细节,Error creating bean with name ‘org.apache.cxf.jaxws.EndpointImpl---1987203924‘
167 0
|
前端开发 Java 数据库
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 准备工作
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 准备工作
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 准备工作
|
JavaScript 前端开发 网络架构
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现删除功能
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现删除功能
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现删除功能
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现添加功能
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现添加功能
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现添加功能
|
Java 数据库连接 数据安全/隐私保护
【Spring技术原理】SpringMVC集成Java Bean Validation实现参数检验功能
【Spring技术原理】SpringMVC集成Java Bean Validation实现参数检验功能
239 0
|
存储 安全 算法
Spring security (一)架构框架-Component、Service、Filter分析
  想要深入spring security的authentication (身份验证)和access-control(访问权限控制)工作流程,必须清楚spring security的主要技术点包括关键接口、类以及抽象类如何协同工作进行authentication 和access-control的实现。
343 0
|
缓存 Java 程序员
从@Async案例找到Spring框架的bug:exposeProxy=true不生效原因大剖析+最佳解决方案【享学Spring】(下)
从@Async案例找到Spring框架的bug:exposeProxy=true不生效原因大剖析+最佳解决方案【享学Spring】(下)