如何...

如何...

开始一个Buffalo项目

    请参考快速教程。这个教程说明如何建立一个新应用。或者下载Buffalo的发布版本,并复制它作为项目的"骨架"。

在现有项目中增加Buffalo特征

    如果你想使用Buffalo的web远程调用的特征,只需要复制buffalo-<version>.jar(还有commons-logging.jar,如果没有提供的话)和buffalo.js。请参考关于使用Buffalo的其它文档。
    如果你需要Buffalo来委派你的页面流(page flow),那么请像demo应用中那样把页面分开。请不要错过最佳实践。在"最佳实践"中,可以找到你的应用是否适合OPOA的依据。

从旧的版本升级

    升级十分的容易。

  1. 如果你从1.1版本升级:
    1. 删除burlap*.jar,替换为buffalo-<version>.jar。
    2. 替换buffalo.js为最新版本。
    3. 去掉在Spring中定义的endpoint servlet。目前我们仅需要一个servlet。
    4. 修改代码:
      1. JavaScript: endpoint修改为"yourappname/bfapp";
      2. Server: 无需改动。
  1. 如果你从1.2版本升级:
    1. 删除burlap*.jar,替换为buffalo-<version>.jar。
    2. 替换buffalo.js为最新版本。
    3. 如果可能的话,修改继承自BuffaloService的那些java代码。将其中相应的方法替换为RequestContext.getContext().getXXX。当然,我们始终会向后兼容。
    4. 就这些了。

与Spring集成

    集成Spring非常简单。首先你需要确定Spring能被成功装载(使用config servlet或者context listener)。请参考Spring的相关文档。此后,如下增加一个config bean到Spring配置文件中。

<bean name="buffaloConfigBean" class="net.buffalo.service.BuffaloServiceConfigurer">
 <property name="services">
 <map>
 <entry key="testSpringService1"><ref bean="yourBeanId"/></entry>
 <\!-\- oterh entries... -->
 </map>
 </property>
</bean>

    就是这些了!当应用被启动后,Buffalo将找到这个bean并装载所有定义在服务属性中的服务。服务来自buffalo-service.properties和Spring并没有区别。
    Buffalo客户端看来都是一样的。

把web页面中的from序列化为对象

   这里用到了Buffalo1.2.1版本的Buffalo.Form.formToBean方法,它能把一个form直接序列化为一个对象。你可以看在demo应用中Form demo。在这里有一个非常简单的例子,用来表现一下我们是如何把一个form到转换为net.buffalo.demo.form.User对象的:

var userObj = Buffalo.Form.formToBean("form1", "net.buffalo.demo.form.User");
buffalo.remoteCall("userService.createUser", [userObj], function(reply)
{  alert(reply.getResult().username); }
)

   序列化原则:

  1. 对于简单的form域(field),如:text, password, radio, select(单选),Buffalo将field值赋值给对象中名为fieldName的属性。
  2. 对于select(多选),checkbox,Buffalo将List<String>赋值给对象中名为fieldName的属性。

自定义事件

Buffalo support customized event when doing remoting call:
   Buffalo支持在进行远程调用时自定义事件:

事件 描述 参数 默认实现
onLoading 发生在请求正被装载时
true or false 一个buffalo loading层(div)将出现在屏幕的右上角
onFinished 当完成请求时 nothing
onError 当发生错误时 (一般是500或者404错误) xmlhttp object 显示一个红色的层(div)
onException 当在调用服务的过程中,抛出异常时 Buffalo.Fault object 显示一个黄色的层(div)
onTimeout 发生超时,默认为10秒 nothing alert("timeout")

If you want to customize the events, You can
   如果你想自定义事件,可以参考下面的代码:

var buffalo = new Buffalo(endpoint, async,
{onLoading: yourLoadingFunction, onError: yourErrorHanlder ...}
)

   或者

buffaloInstance.events["onLoading"] = function(state)
{ if (state) { //displaying message 		... 	}
}

数据绑定

   Buffalo支持将javascript对象的值绑定到html成员(element)中。

buffalo.bindReply(service, params, elementId)

   上面的代码尝试进行一次远程调用,然后将返回结果直接绑定到成员(element)。(来源 www.iocblog.net)
   同理也可使用Buffalo.Bind.bind(elementId, bindValue)方法。

浏览器前进/后退

   这个特性需要buffalo-blank.html文件。下载的二进制包中包含此文件。

<iframe src="buffalo-blank.html"
id="buffalo-view-history-iframe" width="0" height="0"
style="display:none;"></iframe>

   当你想切换视图时,使用buffalo.switchView(viewName)方法,Buffalo将自动记住历史。如果在一些视图中不需要此特征,可以使用buffalo.switchPart(...)方法排除。细节请阅读javascript api

访问/更新Session

   从Buffalo2.0开始,你方便地可以get/set session/cookie/context的值。通过使用RequestContext类,你能以更加轻松的方式全权控制它们的生命周期值。(来源 www.iocblog.net)

// Get a thread-safe request context
context = net.buffalo.request.RequestContext.getContext();

// Get session value
Map session = context.getSession();
String username = (String)session.get("username");
// Update the session value, will refresh the session immediately
session.put("username", "newUsername");

// cookie
Map cookieMap = context.getCookie();
Cookie cookie = cookieMap.get("cookieName");
// update cookie
Cookie c = new Cookie("name", "value");
cookieMap.put(c.getName(), c);

// ServletContext
Map application = context.getApplication();
Object value = application.get("key");
...



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。