论坛首页 Java企业应用论坛

IoVC实例分析:Hello Duke!

浏览 3548 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-27  

本文用一个非常简单的例子“helloDuke",介绍IoVC编程模型的一种实际场景。

 

在IoVC编程模型下的HelloDuke版本,功能没做任何增减,依然如下图所示:

 

 

但由于在程序中用到了IoVC思想,及facelets技术,因此,整个程序的目录结构更改如下:

 

helloDuke
  --duke.gif
  --greeting.xhtml
  --sameName.xhtml
  --WEB-INF
      --web.xml
      --faces-config.xml
      --operamasks.xml
      --classes
        --helloduke
          --GreetingBean.class

 

下面就让我们来完成此应用。

 

 

首先,我们来看一下老版本的greeting.jsp是怎样的:

 

 

那么,在AOM 2.0(即Apusic OperaMasks 2.0)版本下,并且在IoVC编程思想下,greeting.xhtml又是怎样的呢?

 

<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
  xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
  renderKitId="AJAX" xmlns:h="http://java.sun.com/jsf/html">
  <w:page title="helloDuke">
    <w:form>
      <h2>Hello, my name is Duke. What is yours?</h2>
      <img src="duke.gif" />
      <hutputText id="result"/><br/>
      <w:textField id="name"/>
      <w:button id="sayHello" />
    </w:form>
  </w:page>
</f:view>

  

 

我们的注意力不要被<w:>还是<h:>所影响,我们先假设这两者都是等价的。我们主要观察<h:outputText>、<w:textField> 以及<w:button> 这三个主要UI控件的写法。我们可以看到,在新版本中,<h:outputText> 和<w:textField>并没有指定value,而<w:button>也没有指定action,但这三者都有不同的id,并且,整个页面全部都是展现层相关信息,没有任何代码片断或 EL 表达式的引入。

 

那么,这三者的值以及动作事件,又是怎样和后台的JavaBean关联起来的呢?

 

首先,我们也是先熟悉一下老版本中的UserBean(在新版本中,它的名称改为GreetingBean)。

 

package helloduke;
public class UserBean {
private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getResult() {
    if(this.name == null || "".equals(name.trim())) return "Please input your name.";
     else return "Hello " + name;
  }
  public Object sayHello() {
    if("duke".equalsIgnoreCase(name)) return "duke";
    return null;
  }
}

 

那么,在新版本中,上述逻辑变成怎样的呢?如下所示:

 

package helloduke;
@ManagedBean(name="GreetingBean", scope=ManagedBeanScope.SESSION)
public class GreetingBean {
  @Bind(id="result")
  private String result;
  @Bind(id="name")
  private String name;
  @Action(id="sayHello")
  public Object sayHello(){
    if("duke".equalsIgnoreCase(name)) return "/sameName.xhtml";    return null;
  }
  @BeforeRender
  private void settingValues(boolean isPostBack){
    if(this.name == null || "".equals(name.trim())) {
         result = "Please input your name.";
     }
    else {
      result = "Hello " + name;
     }
  }
}

 

我们可以观察到,在result属性上,有一个@Bind(id="result")的annotation声明;同样,在name上,也有@Bind(id="name") 的声明,而在sayHello方法上,则有@Action(id="sayHello") 的声明。至此,我们恍然大悟:通过这样一些声明,<h:outputText>的值自动和result属性关联,<w:textField>的值自动和name属性关联,而<w:button> 的Action事件,则和sayHello方法关联。

 

等一下,这里有个问题:针对result属性和name属性,在AOM 2.0下,连setter/getter方法都没有?是的,完全可以忽略。

 

那么,result的值是在哪里设置的?请注意settingValues方法,它有一个@BeforeRender的声明,意思就是说:当页面在渲染前,请调用此方法。这就相当于一个回调函数,因此,对result属性的设置,我们就可以在此处进行处理。

 

好像一切都很完美,但是,还有一个问题,greeting.xhtml页面,是怎样和GreetingBean对应起来的?目前,你可以假设认为:这是通过命名规则获得的,但这部分内容已经超过本文所要介绍的范围, 请允许我在下一篇文章中介绍。

 

   发表时间:2008-03-27  
必须使用 Apusic 服务器?对Apusic系列不太了解。。。
0 请登录后投票
   发表时间:2008-03-27  
引用

需要注意的是,AOM有些特性是依赖应用服务器底层支持的,譬如,将一个 EJB3 对象自动转换成一个 ManagedBean,并能够在EJB对象中进行视图的绑定,这需要对应用服务器的实现进行适当的调整。针对这样一些高级特性, 无疑需要更改应用服务器的代码。 我们从不否认AOM是由金蝶中间件公司力推的技术,那么,在这样一些高级特性上, 也只有Apusic应用服务器能够支持(Apusic应用服务器是金蝶中间件公司的产品,AOM开发团队自然可以影响到 Apusic 应用服务器的发展,但 AOM开发团队目前却无法影响到其它应用服务器的技术特性)。

幸运的是,这些只有Apusic应用服务器才能够支持的高级技术特性并不常见,绝大部分的 AOM 的技术特性,都能够无缝的在各个应用服务器中获得支持。

AOM开发团队的开放心态永远不变!


一个框架为什么要绑定到一个服务器上。。。埃
0 请登录后投票
   发表时间:2008-03-27  
难道Duke是指陈登*?
0 请登录后投票
   发表时间:2008-03-27  
下载了最新的,用ide运行的时候,出现这个错误:

008-03-27 17:22:07 ERROR [apusic.web.helloduke./helloduke] ?行Servlet??生??。
com.sun.facelets.FaceletException: Error Parsing /greeting.xhtml: Error Traced[line: 10] The prefix "h" for element "h:outputText" is not bound.

0 请登录后投票
   发表时间:2008-03-27  
apusic收费吗
0 请登录后投票
   发表时间:2008-03-28  
可能很多人还不知道,国产Apusic应用服务器不知不觉在国内已经占据10%以上市场份额,仅次于IBM Webshpere和BEA的 Weblogic。
Kingdee没有IBM和BEA那么强势,会在JDK层次做自己产品的功能扩展,所以Apuisc在对J2EE标准的实现上更加中规中矩,完全符合最新的J2EE 5.0标准,保持最大的兼容性。
Apusic 可以自由下载用用,比Tomcat稍大,启动速度也跟Tomcat差不多,配置较简单,但是是支持J2EE 5.0的完整实现。有对EJB3.0和JSF感兴趣的朋友强烈推荐用用。
0 请登录后投票
   发表时间:2008-03-28  
可能很多人还不知道,国产Apusic应用服务器不知不觉在国内已经占据10%以上市场份额,仅次于IBM Webshpere和BEA的 Weblogic。
Kingdee没有IBM和BEA那么强势,会在JDK层次做自己产品的功能扩展,所以Apuisc在对J2EE标准的实现上更加中规中矩,完全符合最新的J2EE 5.0标准,保持最大的兼容性。
Apusic 可以自由下载用用,比Tomcat稍大,启动速度也跟Tomcat差不多,配置较简单,但是是支持J2EE 5.0的完整实现。有对EJB3.0和JSF感兴趣的朋友强烈推荐用用。
0 请登录后投票
   发表时间:2008-06-02  
广告都做到这里来了阿呵呵
有空可以看看我的
http://www.iteye.com/topic/199389
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics