Сервлет Faces не вызывается для конкретной страницы, пустая страница отображается? - PullRequest
1 голос
/ 07 марта 2012

У меня есть icefaces приложение и проблема, с которой я столкнулся здесь, заключается в том, что facesServlet вызывается не со страницы application.xhtml, а когда я вызываю его со страницы test.xhtml, эта страница отображается нормально, но в случае application.xhtml отображается пустая страница, но при просмотре исходного кода вы можете увидеть файл.

application.xhtml Код

<?xml version="1.0" encoding="UTF-8"?>
<!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://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ice="http://www.icesoft.com/icefaces/component">
    <h:head>
        <title>Job Application</title>
        <ice:outputStyle href="./xmlhttp/css/xp/xp.css" />
    </h:head>
    <h:body>

    <ice:form partialSubmit="true">
        <ice:messages globalOnly="true" />

        <ice:panelGrid columns="3">
            <ice:outputLabel for="firstName" value="#{msgs.firstName}:" />
            <ice:inputText id="firstName" value="#{applicant.firstName}" required="true"/>
            <ice:message for="firstName" />

            <ice:outputLabel for="lastName" value="#{msgs.lastName}:" />
            <ice:inputText id="lastName" required="true" value="#{applicant.lastName}" />
            <ice:message for="lastName" />

            <ice:outputLabel for="travelPercentage" value="#{msgs.travelPercentage}:" />
            <ice:inputText id="travelPercentage" required="true" value="#{applicant.travelPercentage}">
                <f:validateLongRange minimum="0" maximum="100" />
            </ice:inputText>

            <ice:message for="travelPercentage" />

            <ice:outputLabel for="dateOfBirth" value="#{msgs.dateOfBirth}:" />
            <ice:selectInputDate id="dateOfBirth" required="true" value="#{applicant.dateOfBirth}"
                                     renderAsPopup="true">
                <f:convertDateTime pattern="MM/dd/yyyy" />
            </ice:selectInputDate>
            <ice:message for="dateOfBirth" />

            <ice:outputLabel for="city" value="#{msgs.city}" />
            <ice:inputText id="city" required="true" value="#{applicant.city}"/>
            <ice:message for="city" />

            <ice:outputLabel for="provinceId" value="#{msgs.provinceId}" />

                <ice:selectOneMenu id="provinceId"
                                 required="true"
                                 value="#{applicant.provinceId}">
                    <f:selectItem itemLabel="#{msgs.select}" itemValue="" />
                    <f:selectItems value="#{provinceSupport.selectItems}" />
                </ice:selectOneMenu>
            <ice:message for="provinceId" />

            <ice:outputLabel for="postalCode" value="#{msgs.postalCode}" />
            <ice:inputText id="postalCode"
                             required="true" value="#{applicant.postalCode}"/>
            <ice:message for="postalCode" />
        </ice:panelGrid>

        <ice:panelGrid columns="1">
            <ice:commandLink value="#{applicantForm.resumeRendered ? msgs.hideResume : msgs.showResume}"
                             actionListener="#{applicantForm.toggleResume}"
                             immediate="true"/>

            <ice:inputTextarea id="resume" value="#{applicant.resume}" cols="40" rows="8"
                               rendered="#{applicantForm.resumeRendered}"/>
        </ice:panelGrid>

        <ice:commandButton value="#{msgs.submitApplication}" action="#{applicantForm.submit}"
                           partialSubmit="false"/>
    </ice:form>

    </h:body>
</html>

test.xhtml code

<?xml version="1.0" encoding="UTF-8"?>
<!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://java.sun.com/jsf/html"
      xmlns:ice="http://www.icesoft.com/icefaces/component">
    <h:head><title>Thank You</title></h:head>
    <h:body>

    <ice:form>
        <ice:outputText value="Thank you #{applicant.firstName} for applying" />
        <br />
        <ice:commandButton action="submitAnother" value="Submit Another" />
    </ice:form>
     </h:body>
</html>

Информация о сервлетах и ​​сопоставлениях сервлетов:

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

<servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/xmlhttp/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>

<servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

Не уверен, что является причиной проблемы, но application.xhtml не достигает facesServlet также, когда я сопоставляю facesServlet как *.jsf, тогда я не смог бы добраться до обеих страниц, но если я сделаю *.xhtml тогда test.xhtml страница будет отображаться facesServlet, но application.xhtml не будет отображаться, не зная, в чем здесь проблема.

Обновление

Я думаю, и не уверен, что здесь

<?xml version="1.0" encoding="UTF-8"?>, может быть причиной проблемы, у меня есть test.xhtml страница как под:

        <!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://java.sun.com/jsf/html"
          xmlns:ice="http://www.icesoft.com/icefaces/component">
        <h:head><title>Thank You</title></h:head>
        <h:body>

        <ice:form>
            <ice:outputText value="Thank you #{applicant.firstName} for applying" />
            <br />
            <ice:commandButton action="submitAnother" value="Submit Another" />
        </ice:form>

        </h:body>
    </html>

но когда я разверну его и нажму на эту страницу на browser, ничего не появится, и если я нажму на просмотр исходного кода, у меня будет

       <?xml version="1.0" encoding="UTF-8"?>
        <!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://java.sun.com/jsf/html"
          xmlns:ice="http://www.icesoft.com/icefaces/component">
        <h:head><title>Thank You</title></h:head>
        <h:body>

        <ice:form>
            <ice:outputText value="Thank you #{applicant.firstName} for applying" />
            <br />
            <ice:commandButton action="submitAnother" value="Submit Another" />
        </ice:form>

        </h:body>
    </html>

Я не уверен, может ли <?xml version="1.0" encoding="UTF-8"?> вызвать проблему или нет, но просмотрите исходный текст того тега xml, в котором он отсутствует на исходной странице xhtml, также я проверил web.xml файл, развернутый на сервере, и он делает правильно сопоставили facesServlet, и у нас нет фильтра, который делает какие-то безумные вещи.

...