`
lywzj2008
  • 浏览: 28339 次
  • 性别: Icon_minigender_1
  • 来自: 河北省
社区版块
存档分类
最新评论

jsf常见问题一

    博客分类:
  • JSF
阅读更多
jsf常见问题一2007-01-28 13:32※JSF中PropertiesNotFound错误
※使用Tomahawk遇到的ExtensionsFilter not correctly configured.问题
※JSF中的国际化
※Error ListenerStart的问题
※java.lang.ClassCastException错误
※JSCookMenu不能导航的问题
※View中的UIInput组件的值不能传递给Backing Bean,或者EventListener, Action方法没有被执行

JSF中PropertiesNotFound错误:
郁闷了一天了,做一个简单的jsf例子,为了实现国际化,做了一个资源文件application.properties,放在resource package中。
代码片段如下:
<f:view>
<f:loadBundle var="bundle" basename="resources.application"/>
...
<h:outputText value="#{bundle.addperson.head}"/>

每次运行都出现如下错误:
javax.faces.el.PropertyNotFoundException: Error getting property 'head' from bean of type java.lang.String

把value变成Hard String: <h:outputText value="Head"/>问题就没有了。
查了一天的资料,终于发现了解决办法:
改写成:
<h:outputText value="#{bundle['addperson.head']}"/>
就好了,唉,在编写jsf的component时,输完“#{bundle.”之后出现的代码提示就是“['addperson.head']”,当时还以为是有错误,结果发现是自己的错误,郁闷!
经常就是这些诸如:环境搭建问题,或者拼写错误,或者这样那样的低级错误导致了大量时间的浪费。

使用Tomahawk遇到的ExtensionsFilter not correctly configured.问题:
尝试着用了一下Tomahawk的inputTextHelper Component,代码片段如下:
<t:inputTextHelp id="birthday" helpText="#{bundle['welcome.birthday.helpertext']}"/>
结果出现如下错误:
java.lang.IllegalStateException: ExtensionsFilter not correctly configured. JSF mapping
missing. JSF pages not covered. Please see: http://myfaces.apache.org/tomahawk/extensionsFilter.html
按照提示,访问了myfaces的主页,修改了web.xml,结果还是错,没办法,使用Google大法,获得如下解决办法。
修改web.xml,添加代码如下:

<filter>
  <filter-name>extensionsFilter</filter-name>
  <filter-class>
   org.apache.myfaces.webapp.filter.ExtensionsFilter
  </filter-class>
  <init-param>
   <param-name>maxFileSize</param-name>
   <param-value>20m</param-value>
   <description>
    Set the size limit for uploaded files. Format: 10 - 10
    bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB
   </description>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>extensionsFilter</filter-name>
  <servlet-name>faces</servlet-name>
</filter-mapping>
<!-- extension mapping for serving page-independent resources (javascript, stylesheets, images, etc.)  -->
<filter-mapping>
  <filter-name>extensionsFilter</filter-name>
  <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>extensionsFilter</filter-name>
  <url-pattern>*.jsf</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>extensionsFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
</filter-mapping>


原来是myfaces主页上只让添加了
<filter-mapping>
  <filter-name>extensionsFilter</filter-name>
  <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
但是系统的配置中却还有*.jsf的url-pattern,所以还需要加上:
<filter-mapping>
  <filter-name>extensionsFilter</filter-name>
  <url-pattern>*.jsf</url-pattern>
</filter-mapping>

<filter-mapping>
  <filter-name>extensionsFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
</filter-mapping>

其中*.jsf是因为在你原来的web.xml中配置Faces Servlet映射如下:
<servlet-mapping>
  <!-- Faces Servlet Mapping -->
  <servlet-name>faces</servlet-name>
  <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
如果你还配了/faces/*,那么你还需要添加:
<filter-mapping>
  <filter-name>extensionsFilter</filter-name>
  <url-pattern>/faces/*</url-pattern>
</filter-mapping>

JSF中的国际化
以我自己的编程习惯来说,我一般都是将所有的环境都用UTF-8来解决,JSP页面(包括jsp文件本身编码,在IDE工具中设置),数据库中的表,IO转换,只要将这些部分都统一为UTF-8,一般来讲都不会有乱码的问题。
在JSF中(在别的框架中也是一样),可以通过资源文件来解决,分以下几个步骤实现:
1、JSP代码中引入<f:loadBundle >,读入资源文件中对应的变量。
2、对于不同语言的资源文件,命名为不同后缀的文件,比如application_en.properties, application_zh.properties等;
3、然后在face-config.xml中定义如下:
  <application>
    <message-bundle>resources.application</message-bundle>
    <locale-config>
      <default-locale>zh</default-locale>
      <supported-locale>en</supported-locale>
    </locale-config>
  </application>
其中<default-locale/>就是默认的资源文件,注意"zh"就是资源文件的后缀(application_zh.properties)
这样在编程的时候,感觉每次都要指定一个字符串,很麻烦,但是其实是用一次的小麻烦来解决将来的大麻烦,还是值得的。

Error ListenerStart的问题:
Deploy之后,运行,在控制台发现如下错误:
严重: Error listenerStart
2006-11-6 17:05:41 org.apache.catalina.core.StandardContext start
严重: Context [/ptrack] startup failed due to previous errors
之后,不能访问目标WebApp。
问题原因:
在Web.xml中配置有问题,没有正确加载Listener,或者在你的webapp的classpath中,找不到对应的listener对应的jar
解决办法1:
修改web.xml配置如下:
添加:
<listener>
  <listener-class>
   com.sun.faces.config.ConfigureListener
  </listener-class>
</listener>
修改:
<servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
中load-on-startup值为小于零的整数,比如-1。
解决办法二:
在web.xml中添加如下:

<servlet>
  <servlet-name>HackServlet</servlet-name>
  <servlet-class>org.jia.HackServlet</servlet-class>
  <init-param>
   <param-name>CONFIGURE_LISTENER</param-name>
   <param-value>
    com.sun.faces.config.ConfigureListener
   </param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
并将Faces Servlet的load-on-startup值修改为2;
HackServlet.java:public class HackServlet extends HttpServlet ...{

public static final String CONFIGURE_LISTENER_KEY = "CONFIGURE_LISTENER";

public static final transient Log logger = LogFactory
   .getLog(HackServlet.class);

public void init(ServletConfig servletConfig) throws ServletException ...{

  LifecycleFactory factory = (LifecycleFactory) FactoryFinder
    .getFactory(FactoryFinder.LIFECYCLE_FACTORY);

  if (factory != null)
   return;

  String className = servletConfig
    .getInitParameter(CONFIGURE_LISTENER_KEY);

  if (className == null) ...{
   logger.fatal("Did not find the init parameter "
     + CONFIGURE_LISTENER_KEY);
   return;
  }

  try ...{
   Class aClass = Class.forName(className);
   ServletContextListener listener = (ServletContextListener) aClass
     .newInstance();
   listener.contextInitialized(new ServletContextEvent(servletConfig
     .getServletContext()));

  } catch (Exception e) ...{
   logger.fatal("The ConfigureListener could not be triggered", e);
  }
}
}


很奇怪的事情是,如果我只是用Sun RI来实现的话,比如JSF in Action中PTrack的例子,就不会出错,除了会报一个formatter.parse() 日期格式因为Locale的问题而导致的Exception外,没有问题。

java.lang.ClassCastException错误:
Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener
javax.faces.FacesException: java.lang.ClassCastException: org.apache.myfaces.application.ApplicationImpl
原因:在libarary中使用了myface实现,但是却还有sun RI的包,只需要把这些重复的包删除掉即可。

结果在运行时,却怎么也不起作用,后来发现是<from-view-id>header.jsp</from-view-id>在捣鬼,将header.jsp用"*"替换(配置文件中无引号),搞定。
View中的UIInput组件的值不能传递给Backing Bean,或者EventListener, Action方法没有被执行
这个情况的一种可能是你的Backing Bean中用了一个Class类型的property,然后在UIInput的value绑定使用了object.propertyObj.property的方式。
在Backing Bean中的property如果是类时,其getter方法不能简单的return person; 因为这个时候可能person还没有初始化,需要先判断是否为null,if (person == null) person = new Person(); 这样就OK了。

  发完上面那个帖子,我再认真看了一下文章还有源程序,恍然大悟,早两天一直在看backingbean,没有看配置文件。现在把成果公开出来:
假如你的地址是:a.jsf?productId=123
那么你的bean配置文件应该有下面:
<managed-property>
<property-name>id</property-name>
<value>#{param.productId}</value>
</managed-property>

id就是你要传递到的变量。#{param.productId}就是来源,如上。
其次在你的bean里面要有setId这个方法来获得。
具体的<managed-bean>如下:
<managed-bean>
<description>
Backing bean that contains product information.
</description>
<managed-bean-name>productBean</managed-bean-name>
<managed-bean-class>catalog.view.bean.ProductBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>id</property-name>
<value>#{param.productId}</value>
</managed-property>
<managed-property>
<property-name>serviceLocator</property-name>
<value>#{serviceLocatorBean}</value>
</managed-property>
</managed-bean>

分享到:
评论

相关推荐

    JSF常见注解

    JSF常用注解,常见的JSF注解的使用方法及其解释。

    JSF控件详细参考手册

    本文档将针对BIMP平台使用到的常见JSF Facelets标签集合进行阐述,供开发者日常开发工作期间参考。BIMP主要采用JSF(Facelets)前端组件技术实施Web 2.0,以提升用户体验,并达到快速、高质量实施产品或项目研发目的...

    EJB+JSF实例与总结(含教程一个)

    是我培训的时候学的EJB3.0和JSF的知识,压缩包里面有在MyEclipse下面搭建EJB环境的向导截图,还有一些EJB常见问题的分析.采用的是jboss免费服务器.配置齐全,下载完毕之后按照说明进行.先发布EJB的工程(jboss),然后发布...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第三部分提供了一个jsf+ejb 3+ jpa整合开发的项目:电子拍卖系统。这个项目包括5个实体,这5个实体之间具有复杂的关联关系,而且业务逻辑也相对复杂,希望让读者理论联系实际,真正将jsf+ejb 3+jpa整合真正运用到...

    JSF实例_十分实用

    直接提供JSF WEB应用用例的WAR包。 其中包含各种常见WEB应用技术如:数据校验、树、菜单、分页等。

    weld-jsf-permalink-1.1.5.Final.zip

    fluxdroid.zip,codeflux常见的android内容codeflux常见的android内容

    Struts2教程/在JAVA EE中作为MVC的优秀框架

    在JAVA EE中作为MVC的优秀框架有很多,例如:常见的有:Struts、WebWork、Tapestry、JSF等,在这些优秀的框架之中,个人比较习惯使的还是:Struts和WebWork,对于JSF使的不多,虽然SUN公司主推JSF,但观察其身边的搞...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Java EE 框架..................................................................................................................................................................................1 ...

    免费下载:自己整理的java学习资料

    自己整理的一些资料,不需要积分,希望对大家有帮助。 里面包有如下的一些java资料 ...Java常见问题.pdf Java数据结构和算法中文第二版.pdf Java网络高级编程.pdf jsp高级运用 spring2中文开发参考手册.chm a.txt

    JSFx:简单的Java Server Faces组件事件控制器。 将服务器负载和AJAX调用减少到您认为必要的程度

    它可以智能地检测并消除JSF组件常见的不必要的客户端/服务器聊天。 该软件使用低影响力的所有客户端技术(例如猴子补丁和JS的AOP版本)来跟踪任何JSF组件(PrimeFaces,MyFaces等)的行为。 保护服务器免受: 用户...

    JAVA WEB典型模块与项目实战大全.zip

    以Java EE主流框架整合应用及项目开发为主线,通过Java Web开发中最常见的19个典型模块和5个完整的项目案例,详细介绍了Struts 2.x、Spring、Guice、Hibernate、iBATIS、JPA、JSF和AJAX等热门开源技术及JSP +Java ...

    jboss应用文档

    jboss4,5,6版本之间差异,jboss常见的报错及解决方案,jboss部署。学习jboss的最好的文档!!!

    JSP2.0技术手册pdf(带示例源码).zip

    JavaServer Faces(JSF)技术以及Java Web Services技术的学习 目录 第一章 安装执行环境 1-1 安装 J2SDK 1.4.2 1-2 安装 Tomcat 5.0.16 1-3 安装 JSPBook 站台范例 1-4 安装 Ant 1.6 第二章 Servlet 2.4 简介 2-1...

    myeclipse6.0中文教程

    本书的第一章介绍常见的 Java 软件以及数据库和 MyEclipse 开发工具的下载和安装方法;第二章则带领读者通过手工和开发工具对比的方式热身开发最简单的应用;第三章则对 Eclipse 开发环境进行介绍;第四章则介绍如何...

    Spring API

    9.9. 常见问题的解决方法 9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 ...

    blankapp-volume1:教程JavaServer Faces com PrimeFaces,CDI和WildFly-第1卷

    blankapp-volume1 带有PrimeFaces,CDI和WildFly的Java... 同样在本卷中,读者将有机会创建自己的第一个JSF组件,将最常见的组件创建技术付诸实践,并将其包装在库中以供将来的任何其他项目使用。 该卷的最终产品将是B

    MyEclipse.6.Java.开发中文教程(1-10章).pdf 有详细的目录(书签)

    本书的第一章介绍常见的Java 软件以及数据库和MyEclipse 开发工具的下载和安装方 法;第二章则带领读者通过手工和开发工具对比的方式热身开发最简单的应用;第三章则对 Eclipse 开发环境进行介绍;第四章则介绍如何...

    水深数据处理工具 QPS Qimera 1.6.3 + x64 中文多语免费版.zip

    Qimera 还包含许多先进的工具,包括声速分析(折射),校准(补丁测试)和摆动测试(用于解决常见传感器安装/集成问题)。 水深数据处理工具 QPS Qimera 1.6.3 + x64 中文多语免费版 Qimera 通过智能地提示下一个...

Global site tag (gtag.js) - Google Analytics