【问题标题】:jsf not showing the fields just the textjsf 不只显示文本字段
【发布时间】:2014-03-05 11:28:27
【问题描述】:

我在 IE 上的 jsf 页面不会在 firefox 上显示任何内容,我至少得到了文本。奇怪的是没有错误,所以我不确定出了什么问题。我四处寻找信息,甚至为页面添加了 f:view ,但仍然没有。感谢您的宝贵时间。

            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
            <html xmlns="http://www.w3.org/1999/xhtml"
                  xmlns:h="http://xmlns.jcp.org/jsf/html"
                  xmlns:f="http://java.sun.com/jsf/core" 
                  xmlns:a4j="http://richfaces.org/a4j" >
            <f:view contentType="text/html">

            <h:head>
            <title>QC-Form</title>
            <link href="./css/styles.css" 
                  rel="stylesheet" type="text/css"/>
            </h:head>



            <h:body>
            <h1 class="title">QC Form</h1>
            <br/> <br/>

              <font face="comic sans MS" size="2" color="#33CCFF">
              <p><b>Enter the information below: </b> </p>
              </font>

            <h:form>

             <font face="comic sans MS" size="2"> 

             <h:panelGroup id="initialInfo">

                <b>Your initials: </b>  
                    <h:inputText value="#{qcFormBean.techNameValue}"/><br/>
                <br/>

                <b>Model #: </b>  
                <h:selectOneMenu value="#{qcFormBean.modelValue}">
                  <f:selectItem itemValue="3600" itemLabel="3600" />
                  <f:selectItem itemValue="7200" itemLabel="7200" />
                  <f:selectItem itemValue="8300" itemLabel="8300" />
                  <f:selectItem itemValue="8400" itemLabel="8400" />
                  <f:selectItem itemValue="8500p" itemLabel="8500p" />
                  <f:selectItem itemValue="8800" itemLabel="8800" />
                  <f:selectItem itemValue="9000" itemLabel="9000" />
                  <f:selectItem itemValue="9008" itemLabel="9008" />
                  <f:selectItem itemValue="9200" itemLabel="9200" />
                  <f:selectItem itemValue="9300" itemLabel="9300" />
                </h:selectOneMenu><br/>
                 <br/>

                <b>Date : </b>
                 <h:outputText  value="#{currentDate}"/>
                <br/> <br/>


                <b>Serial #: </b>  
                    <h:inputText value="#{qcFormBean.serialValue}"/><br/>
                <br/>

                <b>Customer Name: </b>  
                    <h:inputText value="#{qcFormBean.customerNameValue}"/><br/>
                <br/>

                <b>Special Instructions: </b>  
                    <h:inputText value="#{qcFormBean.specialInstructionsValue}"/><br/>    

             </h:panelGroup>
            </font>

              <font face="comic sans MS" size="2" color="#33CCFF">
              <p><b>QC Process</b> </p>
              </font>

             <font face="comic sans MS" size="2"> 

            <h:panelGroup id="dliSerial">
             <b>1.Unit Serial number has been applied: </b>
             <h:selectOneMenu value="#{qcFormBean.unitSerialValue}">
            <f:selectItems value="#{qcFormBean.valueQcValue}"/>
            </h:selectOneMenu>
            <br/>

            </h:panelGroup>

            <br/>
            <b>2.Screen Protector has been applied: </b>
            <h:panelGroup id="dliSticker">
                <h:selectOneMenu value="#{qcFormBean.dliStickerValue}">
                  <f:selectItem itemValue="P" itemLabel="Pass or Not applicable" />
                  <f:selectItem itemValue="M" itemLabel="FAIL-Mechanical" />
                  <f:selectItem itemValue="E" itemLabel="FAIL-Electrical" />
                  <f:selectItem itemValue="C" itemLabel="FAIL-Cosmetic" />
                  <f:selectItem itemValue="S" itemLabel="FAIL-Software" />
                  <a4j:ajax event="change" execute="@this" render="perfbyDliSticker"  limitRender="true" />
                </h:selectOneMenu>
            </h:panelGroup>

            <h:panelGroup id="perfbyDlitcSticker">
                <h:selectOneMenu value="#{qcFormBean.stickerFreq}"
                rendered="#{!qcFormBean.dliStickerValue eq  'P'}">
                    <f:selectItem itemValue="A" itemLabel="Always" />                
                    <f:selectItem itemValue="O" itemLabel="Often" />
                    <f:selectItem itemValue="S" itemLabel="Seldom" />                
                </h:selectOneMenu>
            </h:panelGroup>


            <br/>
            </font>

            <h:commandButton action="#{qcFormBean.submitForm()}"/>

            </h:form>

            </h:body>

            </f:view>

            </html>

更新:在 firefox 上右键单击源文件确实会显示如下所示的原始代码:

<b>Your initials: </b>  
    <h:inputText value=""></h:inputText><br />
<br />

<b>Model #: </b>  
<h:selectOneMenu value="">
</h:selectOneMenu><br />
 <br />

我的 web.xml 文件包含以下 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>*.jsf</url-pattern> 
</servlet-mapping> 

【问题讨论】:

  • 在网络浏览器中右键单击页面并执行查看源代码。您仍然看到原始 XHTML 源代码还是看到 JSF 生成的 HTML 输出?症状表明前者,但有点令人惊讶的是,您似乎没有费心检查网络浏览器实际检索到的内容。
  • 顺便说一下,HTML &lt;font&gt; 标记自 1998 年以来已被弃用。请确保您阅读的是最新的 HTML 教程。
  • 现在将删除字体标签,顺便说一句,当我看到源代码时,我似乎正在获取原始代码。 Firefox 检索了标签外的文本,虽然它在源代码中显示“/h:inputText”,但仍然没有任何内容会更新我的问题
  • 看,有原因。 HTTP 请求根本没有调用FacesServlet,因此它无法解析 XHTML 源代码并生成所需的 HTML 输出。你肯定知道浏览器不理解 XHTML/PHP/JSF/ASP/JSP/Python/whatever,但只有 HTML,对吧?
  • 那么web.xml文件是罪魁祸首,这就是你说的?

标签: jsf servlets jsf-2 facelets


【解决方案1】:

根据 cmets 中描述的症状,&lt;f:xxx&gt;&lt;a4j:xxx&gt; 标签被 JSF 正确处理,但 &lt;h:xxx&gt; 标签没有。现在,让我们看看他们的 XML 命名空间声明,这是所有处理开始的地方:

xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:a4j="http://richfaces.org/a4j" >

您为&lt;h:xxx&gt; XML 命名空间声明的xmlns.jcp.org 域是自JSF 2.2 起引入的。因此,它未处理的症状表明您根本没有运行 JSF 2.2,而是运行较旧的 JSF 2.x 版本,例如 2.0 或 2.1,它们还不能识别新的 XML 名称空间域。

你基本上有两个选择:

  1. 相应地修复&lt;h:xxx&gt; XML 命名空间以匹配 JSF 2.0/2.1 规范:

    xmlns:h="http://java.sun.com/jsf/html"
    
  2. 或者,只需升级到 JSF 2.2。

【讨论】:

  • 谢谢@BalusC,很抱歉我花了一段时间才看到或知道这个问题,我只是更改了我的 xml 命名空间以保持简单,非常感谢。
【解决方案2】:

这意味着您的 jsf 标签不会被解析为纯 html。要确认这一点,请查看页面视图源,如果您可以看到普通的 jsf 标签,那么这就是问题所在。

标签没有被解析的主要原因是你的请求没有被 Faces servlet 处理。你的 web.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>*.xhtml</url-pattern>    
 </servlet-mapping>

【讨论】:

  • 我有这样的东西:' Faces Servletjavax.faces.webapp.FacesServlet1Faces Servlet*.jsfpattern> ' 我猜这不正确?
猜你喜欢
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多