Seam笔记

本文是本人学Seam做的的笔记,记录的是一些关键的概念,仅供参考。

1.如果要在应用服务器上使用seam,必须将他“钩进”servlet容器的生命周期。
2.Servlet上下文生命周期表示Web应用程序的整个生命周期,用来启动服务,如Seam容器。
3.请求生命周期则是单个请求的生命周期。它包括JSF生命周期和Seam生命周期,始于浏览器请求一个由应用程序处理的URL,终于服务器将请求结果发送到浏览器的整个过程。
4.JSF生命周期的作用域只限于JSF Servlet的service()方法,不关心非JSF的请求。
5.Seam生命周期:扩展了JSF生命周期,在扩展点上织入额外的服务;除了JSF的生命周期,他还进行了别的扩展。从而seam生命周期在横向上能参与非JSF请求,纵向上能捕捉发生在JSF Servlet作用域之外的事件。可以将seam的生命周期当做是JSF生命周期的演变。
6.只要是注册的应用程序一被初始化,Servlet监听器立即就会被通知。Seam利用这个生命周期事件来启动自己。在应用程序位于WEB-INF目录下的web.xml中添加下面的XML代码片段来注册SeamListener:
  

 <listener>
       <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
   </listener>
JSF Servlet在web.xml中使用下面两段XML代码片段来启动:
  <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
 </servlet>
 <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.seam</url-pattern>
 </servlet-mapping>

7.Facelets是一种轻量化的、基于XML的视图技术,它负责解析专为生成JSF UI组件树而定义的有效XML文档。它提供了直接转变成UI组件的组件标签。Facelets必须在faces-config.xml中注册才能使用,放在WEB-INF目录下:
 
 <faces-config>
     <application>
         <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
     </application>
 </faces-config>

8. .xhtml这个扩展名是Facelets视图模板的默认后缀,但是JSF的默认行为是将JSF视图标识符进来的请求扩展到扩展名为.jsp的jsp文件上。为了让JSF查找Facelets模板,必须利用Servlet上下文参数在web.xml中将.xhtml扩展名注册为JSF视图的默认后缀:
 
 <context-param>
      <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
      <param-value>.xhtml</param-value>
  </context-param>

9.JSF应用程序中的大多数调用都要经过JSF Servlet.然而,在某些情况下,你还需要将其他不是JSF生命周期的资源发送到浏览器中。Seam中用了一个定制的Servlet----资源Servlet来处理这项工作。为了配置资源Servlet,要将以下Servlet片段放在之前配置好的JSF Servlet的上方或者下方。这个Servlet的URL模式必须与JSF Servlet所用的模式不同:
<servlet>
  <servlet-name>Seam Resource Servlet</servlet-name>
  <servlet-class>
       org.jboss.seam.servlet.SeamResourceServlet
  </servlet-class>
</serrvlet>
<servlet-mapping>
  <servlet-name>Seam Resource Servlet</servlet-name>
  <url-pattern>/seam/resource/*</url-pattern>
</servlet-mapping>

10.Seam通过一个Servlet过滤器来处理非JSF请求,Seam的过滤器可以处理所有的请求,并且允许非JSF的请求访问Seam容器。Seam过滤器必须作为web.xml中的第一个过滤器。如果没有放在最前面,某些特征就有可能不能正常执行。注册时,只需将下面的这两段代码放在所有的过滤器之上即可:
 <filter>
  <filter-name>Seam Filter</filter-name>
  <filter-class>org.jboss.seam.servlet.Seamfilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>Seam filter</filter-name>
  <url-pattern>/*<url-pattern>
</filter-mapping>

11.Seam的内建过滤器:在Seam的组件描述符(如/WEB/INF/components.xml)中注册的过滤器由主SeamFilter利用一个链委托模型进行管理。每个过滤器都支持两个属性:url-pattern和disabled,用它们来控制要捕捉哪些进来的请求。
Seam使用阶段监听器來强化JSF的功能。注册Seam阶段监听器的代码片段:
  
 <lifecycle>
      <phase-listener>
          org.jboss.seam.jsf.SeamPhaseListener
      </phase-lister>
  </lifecycle>

12.Seam生命周期:指Seam Servlet过滤器和(目前Seam参与其中的)JSF生命周期的组合。当请求进入Seam生命周期时走的路径:
       

  注:由Seam过滤器预处理的请求,在进入JSF的Seavlet或者Seam的资源Servlet。
13.Seam使用高级的页面编排,使用page.xml页面描述符,可以用来配置一个无限制的页面集合,每个页面都由一个<page>元素以及许多非特定于页面的配置表示;面向页面的配置也可以被分成细粒度的配置文件,每个文件服务于某一个JSF页面。他们可以通过用 .page.xml替换JSF视图ID的后缀而得名。例如,Facility.xhml细粒度配置文件是Facility.page.xml。
14.通过利用上下文,Seam的page.xml中定义的导航规则就能纵观全局,实现智能导航。Seam的页面描述符(page.xml)中定义的导航规则不仅仅是根据请求的来源或者执行了哪个动作来做决定,而是看上下文(或者作用域)中对象要告诉我们什么。同一个页面不能在全局的页面描述符和细粒度的描述符中配置。事实上,每个视图ID只能有一个页面配置。
15.导航规则中,Seam允许在返回方法的返回值中指定目标视图ID。如果返回值以正斜线(/)开头,Seam就会假定他是一个有效的视图ID,并立即发出一个指向该视图ID的重定向:public String goToCourse() { return “/Course.xhtml”; }
16.<navigation>节点中的evaluate属性是个EL表达式,引用它来的获得结果值,而不是获得动作的返回值。
17.Seam提供了两个UI命令组件:<s:link>用来创建链接,<s:button>用来创建按钮。它们分别代替了标准JSF组件集中相应的命令组件:<h:commandLink>,<h:commandButton>。
18.从根本上说,Seam是一个存放名称或者变量名的容器。Seam将容器分成许多隔间,并将这些变量相应地分散到每个隔间中去,每个隔间表示用户一个范围,在Seam术语中称为上下文。上下文可以定义可以在哪里找到某个变量名,以及它要在那里停留多久。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值