对话conversation
对话模型的规则/处理流程?
除RestoreView阶段外,都有一个激活的会话Context
Restore View 后,Seam会恢复长时间运行的对话Context ,如果不存在,创建一个临时的对话Context
@Begin 临时Conversation Context 提升为长时间运行Context @End 长时间运行Context 降级为临时Context
Render Response后,保存长时间,销毁临时对话Context
JSF的Post Back和redirect都传播对话Context 但是非Faces的 Get不会
如何在非Faces的Request中传递对话context?
只要传递conversation id 即可 可以在链接中加参数
也可以使用S:conversationId标签
控制会话的标签有哪些,具体是何作用?
什么是工作区?
即一个会话
S:link 和 s:button的作用?
打开新窗口时仍然可以使用Seam中的Context,以及继续会话 另外可以实现REST的方法传递
进行工作区管理必须做哪些事情?
必须在pages.xml为工作区的页面命名
然后可以在页面中使用switcher切换工作区
在对话组件中如何使用JSF 的Binding组件?
定义一个Event范围的componet(带JSF的Conponent) ,然后在其他组件中@In来使用 在页面中还可以使用uiComponent来直接调用JSF 的Component
如何解决对话组件并发访问问题?
Conversation不允许并发调用,使用RichFaces可以使用Queue来并发,需要设定超时时间
如何使用异步Action
使用@Asynchronous
页面流Page Flow
Seam的页面导航方式有哪些?
JSF或者Seam的导航-无状态的导航 jPDL导航-有状态的导航
如何实现后退按钮?
在page.xml中对page 增加属性back=”enabled”
如何开始使用JPDL页面流?
事件
为什么使用事件?
可以实现功能的松耦合,但是其执行顺序是直接调用关系,所以过度使用或者事件监听器设计不佳,会引起性能问题。
Seam中包含哪些事件?
JSF事件
jBPM的状态转移事件 Seam页面action
Seam Component的事件组件驱动事件 Seam内置事件 ,上下文事件
JSF事件有哪些?
页面中的action指定的
如何使用页面参数
在pages.xml的Page 里定义,参数可以Convert或者validate
如何rewrite URL
在page.xml中 view-id定义为不存在真实文件即可实现rewrite URL
如何进行页面参数的Convert和Validate
直接在中指定converter或者validator即可
组件事件如何生成,如何监听?
使用RaiseEvent注释或者Events.instance().raiseEvent(“xx”)生成实践 使用Observer注释监听事件
上下文事件主要有哪些?
包括Context相关事件、PageFlow相关,工作流相关
JSF相关,安全认证相关,异常处理相关,事务相关的事件
拦截器
与事件相比的区别?
事件是实现功能之间的松耦合,其可以在方法的内部生成任意事件,而拦截器是在方法外围,即调用前后切入,是AOP的方式。
Seam拦截器如何使用
1. 在Interceptor类中的执行拦截方法外增加@AroundInvoke注释 2. 自定义一个注释,使用@Interceptor(YouIntercepter.class) 3. 在拦截的类上增加自定义注释
另外可以直接使用@Interceptor(YouIntercepter.class)来拦截
异常控制
怎样配置Seam支持异常处理?
在Web.xml中配置Seam Filter
注释和XML配置中如何处理异常?
使用HttpError注释和Redirect注释
在pages.xml中可以定义
Seam程序中的基本异常有哪些?
常见的有JPA的异常,JSF 的异常等
相关推荐: