大鱼

JSF使用注意点

JSF使用注意点

1.转换时间时,必须加上时区GMT+8,不然相差一天。
<f:convertDateTime  timeZone="GMT+8" dateStyle="long" type="date"/>
 
2.<h:outputText value="#{productBean.view}"/>当view为空时,不显示。
 
3. 
actionListener在执行了action之后再执行。
 
可以没有action,而只有actionListener。
 
action可以设置成一个方法,也可以设置为一个导航用例的<from-outcome>
多个页面如果使用了同一个request级的backingBean,可能导致一些莫名其妙的问题。如:不能执行指定的Action.
 
4.对于向managed-bean的属性注入request参数时,其<managed-bean-scope>必须为request,<property-class>不要为值类型(如果是值类型,当指定的request参数为空时,注入时会出错,因为一个空对象如Integer null不能自动转换为一个值类型如int的0)。如下所示:
<managed-bean>
   <managed-bean-name>productBean</managed-bean-name>
   <managed-bean-class>demo.view.ProductBean</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
   <managed-property>
    <property-name>id</property-name>
    <property-class>java.lang.Integer</property-class>
    <value>#{param.id}</value>
   </managed-property>
   <managed-property>
    <property-name>view</property-name>
    <property-class>java.lang.Boolean</property-class>
    <value>#{param.view}</value>
   </managed-property>
  </managed-bean>
 
5.对于以下查找是按部件id查找的,不是按参数名称查找的。
UIParameter uip =(UIParameter)event.getComponent().findComponent("productId");
//event是actionListener中的参数ActionEvent类型。
所以
<h:commandLink action="view">
<f:param id="productId" name="id" value="#{product.id}"/>
</h:commandLink>
<f:prarm>必须设置id
 
Map params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String someValue = params.get("id");

这个是按参数名称查找的
JSF标签只是JSF组件的外衣,Id就是组件的命名,与Delphi的组件名是一样的,之所以用Id不用Name,是为了与HTML中的一致(HTML input组件 id是其标识,name是其传递到服务器端的参数名。),所以查找JSF组件当然用Id了。
 
6.当一个页面的BackingBean的构造函数中运行出错或属性注入出错时,表面上会报计算表达式错误,原因是这个BackingBean没有构造出来,为空,当然在Reader页面时会没有办法求相关的表达式的值。
 
 
7.request级的BackingBean在从客户端到服务端一次请求后,就被销毁。在这次请求中,只会被创建一次。在Forward之前创建的BackingBean在Forward之后,并不会被再次创建。
 
8.判断是否是回传。
protected boolean isPostBack()
 {
  if (FacesContext.getCurrentInstance().getRenderResponse())
   return false;
  else
   return true;
 }
 
 
9.<f:view>里使用<jsp:include>时的注意事项
感谢 tdwebber 提供。

1) When using a jsp:include within the f:view tags, must include f:subview in the included file (or around the jsp:include tag).

当在f:view中使用jsp:include标签插入一个文件时,必须用f:subview把jsp:include包起来

2) In the include file, cannot have any HTML. All HTML tags must be wrapped in f:verbatim tags.

在被插入的文件中,不能有任何的html标签,如果必须使用html标签,必须用f:verbatim将它包起来。

3) Within main f:view tags however, it is not necessary to wrap everything in f:verbatim tags (it's not bad either). Just HTML that appears as children to other JSF components (i.e. t:newspaperTable).

在主f:view中,没有必要用f:verbatim将html标签包起来(当然包起来也可以)。当html标签出现在子视图或其它JSF部件标签中时,就要用f:verbatim包起来。

10.JSF的缓存能力好像太强了,有时停止了服务器,改动了jsp页面中的jsf标签,再启动服务器,但到该页面时,还是原来的内容,需要手动刷新一下。有时需要先转到别的页面,再回来刷新一下才能看到更新的内容。

posted on 2009-10-25 22:50 大鱼 阅读(188) 评论(0)  编辑  收藏 所属分类: JSF


只有注册用户登录后才能发表评论。


网站导航: