【问题标题】:JSF doesn't interpreted in seamJSF 不在接缝中解释
【发布时间】:2010-07-01 15:58:07
【问题描述】:

大家好,

我在 weblogic 10.3 上安装了 jboss-seam(有很多问题 :( )但现在它可以工作了,我的应用程序已部署。

但是现在,我遇到了一个新问题,我的 JSF 没有被解释并且 JSF 代码出现在 HTML 中。

这是我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
 <listener>
   <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
 </listener>
  <listener>
    <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
  </listener>


   <!-- RichFaces -->

   <context-param>
      <param-name>org.richfaces.SKIN</param-name>
      <param-value>glassX</param-value>
   </context-param>

   <!-- Suppress spurious stylesheets -->

   <context-param>
      <param-name>org.richfaces.CONTROL_SKINNING</param-name>
      <param-value>disable</param-value>
   </context-param>

   <context-param>
      <param-name>org.richfaces.CONTROL_SKINNING_CLASSES</param-name>
      <param-value>disable</param-value>
   </context-param>

   <!-- Change load strategy to DEFAULT to disable sending scripts/styles as packs -->

   <context-param>
      <param-name>org.richfaces.LoadStyleStrategy</param-name>
      <param-value>ALL</param-value>
   </context-param>

   <context-param>
      <param-name>org.richfaces.LoadScriptStrategy</param-name>
      <param-value>ALL</param-value>
   </context-param>


  <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>
  <servlet>
    <servlet-name>Seam Resource Servlet</servlet-name>
    <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
  </servlet>


   <!-- Facelets development mode (disable in production) -->

   <context-param>
      <param-name>facelets.DEVELOPMENT</param-name>
      <param-value>@debug@</param-value>
   </context-param>

   <!-- JSF -->

   <context-param>
      <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
      <param-value>.seam</param-value>
   </context-param>

   <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.seam</url-pattern>
   </servlet-mapping>



  <servlet-mapping>
    <servlet-name>Seam Resource Servlet</servlet-name>
    <url-pattern>/seam/resource/*</url-pattern>
  </servlet-mapping>
  <ejb-local-ref>
    <ejb-ref-name>jboss-seam-jee5/AuthenticatorAction/local</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>org.jboss.seam.example.booking.Authenticator</local>
  </ejb-local-ref>
  <ejb-local-ref>
    <ejb-ref-name>jboss-seam-jee5/BookingListAction/local</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>org.jboss.seam.example.booking.BookingList</local>
  </ejb-local-ref>
  <ejb-local-ref>
    <ejb-ref-name>jboss-seam-jee5/RegisterAction/local</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>org.jboss.seam.example.booking.Register</local>
  </ejb-local-ref>
  <ejb-local-ref>
    <ejb-ref-name>jboss-seam-jee5/ChangePasswordAction/local</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>org.jboss.seam.example.booking.ChangePassword</local>
  </ejb-local-ref>
  <ejb-local-ref>
    <ejb-ref-name>jboss-seam-jee5/HotelBookingAction/local</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>org.jboss.seam.example.booking.HotelBooking</local>
  </ejb-local-ref>
  <ejb-local-ref>
    <ejb-ref-name>jboss-seam-jee5/HotelSearchingAction/local</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>org.jboss.seam.example.booking.HotelSearching</local>
  </ejb-local-ref>
  <ejb-local-ref>
    <ejb-ref-name>jboss-seam-jee5/EjbSynchronizations/local</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>org.jboss.seam.transaction.LocalEjbSynchronizations</local>
  </ejb-local-ref>
  <session-config>
    <session-timeout>10</session-timeout>
  </session-config>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
</web-app>

我的 FacesServlet 在启动时加载,但 JSF 不起作用。

有人可以帮助我吗?

谢谢。

【问题讨论】:

  • 我不明白你如何使用Seam,同时在web.xml 文件中声明EJB 引用。一旦您启用 Seam EJB 拦截器,Seam 就会负责注入任何 EJB。
  • 此声明是强制性的,以与 weblogic 兼容。它在文档中,所以我认为很好;)
  • 您确定@debug@ 在 web.xml 中有效吗?
  • 我不知道,我从文档中复制了这个^^。我是 J2EE 新手,所以我不了解所有配置。

标签: java jsf seam weblogic weblogic-10.x


【解决方案1】:

如果XHTML页面没有被FacesServlet解析,那么仅仅意味着请求的URL与FacesServleturl-pattern不匹配。您已将其 url-pattern 设置为 *.seam 因此,要打开 JSF 页面,您不应通过 http://example.com/page.xhtml 调用它,而应通过 http://example.com/page.seam 调用它。

顺便说一下,javax.faces.DEFAULT_SUFFIX 设置了 JSF 应该查找和解析的模板文件的 实际 文件扩展名。您也将其设置为 .seam,但这应该是 .xhtml

【讨论】:

  • javax.faces.DEFAULT_SUFFIX 应设置为模板文件的实际文件扩展名。这是通常 .xhtml。但是,如果您真的在使用扩展名为 .seam 的模板文件,那就顺其自然吧。然后我只质疑为什么您可以“普通”地查看 XHTML 文件。您应该已经找不到 404 页面。您确实需要提供更多信息:1) 实际 文件扩展名是什么? 2) 你在请求 URL 中(在浏览器的地址栏中)使用了什么扩展?
【解决方案2】:

我不知道这是否有帮助,但这是我们的 web.xml

<?xml version="1.0" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

<!-- Ajax4jsf -->

<context-param>
    <param-name>org.richfaces.SKIN</param-name>
    <param-value>blueSky</param-value>
</context-param>

<!--
    This config will enforce the container to compress all the richfaces
    resources including images, stylesheets, javascript to be compressed
    before sending to client. It will make significant reduced load time.
-->
<context-param>
    <param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
    <param-value>true</param-value>
</context-param>

<!-- Seam -->

<listener>
    <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>

<filter>
    <filter-name>Seam Filter</filter-name>
    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter>

<filter>
    <filter-name>UTF8 Filter</filter-name>
    <filter-class>foo.bar.filter.UTF8Filter</filter-class>
</filter>

<filter-mapping>
  <filter-name>UTF8 Filter</filter-name>
  <url-pattern>*.seam</url-pattern>
</filter-mapping>


<filter-mapping>
    <filter-name>Seam Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>


<servlet>
    <servlet-name>Seam Resource Servlet</servlet-name>
    <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Seam Resource Servlet</servlet-name>
    <url-pattern>/seam/resource/*</url-pattern>
</servlet-mapping>

<!-- Facelets development mode (disable in production) -->

<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>facelets.SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
</context-param>

<!-- JSF -->

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

<context-param>
    <param-name>facelets.LIBRARIES</param-name>
    <param-value>/WEB-INF/kf.taglib.xml</param-value>
</context-param>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.seam</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.csv</url-pattern>
</servlet-mapping>
<!-- Job executor servlet for jBPM Timers -->
<!-- TODO: Restrict access or better switch to ejb3 TimerService -->
<servlet>
    <description>
        This servlet has the purpose of executing pending jobs.
    </description>
    <servlet-name>JobExecutorServlet</servlet-name>
    <servlet-class>org.jbpm.job.executor.JobExecutorServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>JobExecutorServlet</servlet-name>
    <url-pattern>/jobs</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Document Store Servlet</servlet-name>
    <servlet-class>org.jboss.seam.document.DocumentStoreServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Document Store Servlet</servlet-name>
    <url-pattern>*.pdf</url-pattern>
</servlet-mapping>

<security-constraint>
    <display-name>Restrict raw XHTML Documents</display-name>
    <web-resource-collection>
        <web-resource-name>XHTML</web-resource-name>
        <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

<session-config>
    <session-timeout>60</session-timeout>
</session-config>

【讨论】:

  • 有一点很奇怪。在监控 servlet 中,我看到 FacesServlet 的“调用总数”在每次页面加载时都会增加。但是 jsf 没有被解释。很奇怪……
【解决方案3】:

我的 web.xml 中有这个:

<filter>
        <display-name>RichFaces Filter</display-name>
        <filter-name>richfaces</filter-name>
        <filter-class>org.ajax4jsf.Filter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>richfaces</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

现在,它正在工作。

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 2012-05-17
    • 1970-01-01
    • 2011-04-04
    • 2015-12-21
    • 2012-08-02
    • 2013-01-07
    • 2015-11-25
    • 2015-01-10
    相关资源
    最近更新 更多