快速业务通道

JSF 2简介:JSF向导 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
ard.end}"/>      </h:panelGrid>    </h:form> </ui:composition>

JSF 2简介:JSF向导(7)

时间:2010-10-26 IBM David Geary

当用户单击 Next 或 Previous 按钮时,JSF 就会向服务器进行一次 Ajax 调用,并且当此 Ajax 调用返回时,JSF 就会更新问题、问题的选择(单选按钮)以及按钮本身。

Finish 按钮不是一个 Ajax 按钮,因为单击它会导航到 done 页面。

请注意清单 7 和 8 中对 wizard bean 有很多引用。该 bean 实际上是这个测验向导的一个控制器。我在本文结束之前来介绍一下这个 bean。

CDI: Dependency injection and conversations

CDI 可被描述为打了激素的 JSF 托管 beans。作为 Java EE 6 的一个组件,CDI 可以说是在 Spring 内酝酿许久的一些概念的标准化,比如依赖注入和拦截器。实际上,CDI 和 Spring 3 有很多类似的特性。

CDI 让您能够通过松散耦合(loose coupling)和强类型化(strong typing)为关注点解除耦合。这样一来,您就得以从日常的 Java 编程的辛劳中解放出来,比如实例化对象和控制对象的生命期。

从 JSF 的角度,CDI 的一个特别吸引人之处是 conversation 作用域。conversation 作用域是 Seam 最早提出来的,指的是一个生命期可通过编程方式控制的作用域,它让您能够从请求和会话之间的全有或没有的两难中逃离出来。

此向导对 CDI 的所有使用都位于 Wizard bean 内,如清单 9 所示:

清单 9. Wizard bean

package com.clarity; import java.io.Serializable; import javax.enterprise.context.Conversation; import javax.enterprise.context.ConversationScoped; import javax.enterprise.inject.Produces; import javax.faces.event.ActionEvent; import javax.inject.Inject; import javax.inject.Named; @Named() @ConversationScoped() public class Wizard implements Serializable {   private static final long serialVersionUID = 1L;   private Questions questions = new Questions();   private int cursor = 0;   @Inject   private Conversation conversation;    @Produces @Named   public Question[] getQuestions() {    return questions.getQuestions();   }   public void nextButtonClicked(ActionEvent e) {    incrementCursor();   }   public void previousButtonClicked(ActionEvent e) {    decrementCursor();   }   public void incrementCursor() { ++cursor; }   public void decrementCursor() { --cursor; }   public int getCursor()    { return cursor; }   public void resetCursor()   { cursor = 0; }   public boolean getNextButtonEnabled() {    return cursor != questions.size() - 1 &&    (questions.getQuestions())[cursor].isAnswered();   }   public boolean getPreviousButtonEnabled() {    return cursor > 0;   }   public boolean getFinishButtonEnabled() {    return cursor == questions.size() - 1 &&    (questions.getQuestions())[cursor].isAnswered();   }   public String start() {    conversation.begin();    return "quizWizard/wizard";   }   public String end() {    conversation.end();    return "/done";   }   private void setCurrentQuestionUnanswered() {    Question currentQuestion = (questions.getQuestions())[

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号