Кнопка Command ссылается на неправильное имя пути в проекте Spring Web Flow

Я пытаюсь сложить два числа и отобразить результат, но у меня проблемы с рендерингом.

Я получаю это из журнала ajax. (Разнесены для удобства чтения)

info [12:44:10.893]: Element error 
<error>
  <error-name>
    class com.sun.faces.context.FacesFileNotFoundException
  </error-name>
  <error-message>
    <![CDATA[/WEB-INF/WEB-INF/intro.xhtml Not Found in ExternalContext as a Resource]]>
  </error-message>
</error>

Я не вижу, где он получает две папки WEB-INF в имени пути.

Вторая часть этого вопроса заключается в том, что я не уверен, где следует вызывать calculate.sum. Это может повлиять на результат или должно быть в отдельном вопросе. #{calculator.sum} — это вывод, который вызывается при нажатии кнопки.

Это форма, которую я редактирую.

 <rich:panel id="UserManagePanel" header="Welcome to test">

 <a href="main">Enter The WebFlow</a>
  <br/>
  <br/>
  <br/>
    <h:inputText id="additive1" value="#{calculator.a}"/>
  <br/>
    <h:inputText id="additive2" value="#{calculator.b}"/>
  <br/>
    <a4j:commandButton type="button" id="btn_add" action="#{calculator.sum}" value="Add" reRender="out" execute="@form"/>
  <br/>

  <a4j:outputPanel id="out">
    <h:outputText value="#{calculator.sum}" rendered="true"/>
  </a4j:outputPanel>
  <br/>

  <a4j:log/>

   </rich:panel>
  </h:form>

Поддерживающие документы:

основной поток.xml

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/webflow
        http://www.springframework.org/schema/webflow/spring-webflow-2.4.xsd">

    <view-state id="Page2">
        <transition on="gotoPage3" to="Page3"/>
        <!--  <transition on="printDets">
            <evaluate expression="userBean.printDetails()" />
        </transition> -->
    </view-state>

    <view-state id="Page3">
        <transition on="gotoSubFlow" to="Page3subflow"/>
        <transition on="gotoPage5" to="Page5"/>
    </view-state>

    <view-state id="Page5">
    </view-state>

    <subflow-state id="Page3subflow" subflow="subflow1">
    </subflow-state>

    <end-state id="finish" />

</flow>

веб.xml

<?xml version="1.0" encoding="ASCII"?>
<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_3_0.xsd" version="3.0">

<!-- The master configuration file for this Spring web application -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/config/web-application-config.xml
    </param-value>
</context-param>

<!-- Declare Spring Security Facelets tag library 
<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/springsecurity.taglib.xml</param-value>
</context-param> -->

<!-- Enforce UTF-8 Character Encoding -->
<filter>
    <filter-name>charEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>charEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- Enables Spring Security -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<!--  
<context-param>
    <param-name>org.richfaces.skin</param-name>
    <param-value>joshCustom</param-value>
</context-param>
-->
<context-param>
    <param-name>org.richfaces.enableControlSkinning</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>

<!-- Use JSF view templates saved as *.xhtml, for use with Facelets -->
<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

<!-- Enables special Facelets debug output during development -->
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

<!-- Causes Facelets to refresh templates during development -->
<context-param>
    <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
    <param-value>1</param-value>
</context-param>

<!--
    Uncomment this to disable partial state saving when using Apache MyFaces 2 !!
<context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
</context-param>
-->

<!-- Loads the Spring web application context -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

<!-- Map all /spring requests to the Dispatcher Servlet for handling -->
<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/spring/*</url-pattern>
</servlet-mapping>

<!-- Just here so the JSF implementation can initialize, *not* used at runtime -->
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<!-- Just here so the JSF implementation can initialize -->
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
</servlet-mapping>

<!-- Added for JAX-WS compatibility -->
<servlet>
    <servlet-name>JAX-WS Servlet</servlet-name>
    <servlet-class>demo.SimpleServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>JAX-WS Servlet</servlet-name>
    <url-pattern>/SimpleService</url-pattern>
</servlet-mapping>



  <!-- The welcome file -->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app><?xml version="1.0" encoding="ASCII"?>
<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_3_0.xsd" version="3.0">

    <!-- The master configuration file for this Spring web application -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/config/web-application-config.xml
        </param-value>
    </context-param>

    <!-- Declare Spring Security Facelets tag library 
    <context-param>
        <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
        <param-value>/WEB-INF/springsecurity.taglib.xml</param-value>
    </context-param> -->

    <!-- Enforce UTF-8 Character Encoding -->
    <filter>
        <filter-name>charEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>charEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- Enables Spring Security -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
      <filter-name>springSecurityFilterChain</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--  
    <context-param>
        <param-name>org.richfaces.skin</param-name>
        <param-value>joshCustom</param-value>
    </context-param>
    -->
    <context-param>
        <param-name>org.richfaces.enableControlSkinning</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>

    <!-- Use JSF view templates saved as *.xhtml, for use with Facelets -->
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>

    <!-- Enables special Facelets debug output during development -->
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

    <!-- Causes Facelets to refresh templates during development -->
    <context-param>
        <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
        <param-value>1</param-value>
    </context-param>

    <!--
        Uncomment this to disable partial state saving when using Apache MyFaces 2 !!
    <context-param>
        <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
        <param-value>false</param-value>
    </context-param>
    -->

    <!-- Loads the Spring web application context -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
    <servlet>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <!-- Map all /spring requests to the Dispatcher Servlet for handling -->
    <servlet-mapping>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <url-pattern>/spring/*</url-pattern>
    </servlet-mapping>

    <!-- Just here so the JSF implementation can initialize, *not* used at runtime -->
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Just here so the JSF implementation can initialize -->
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>

    <!-- Added for JAX-WS compatibility -->
    <servlet>
        <servlet-name>JAX-WS Servlet</servlet-name>
        <servlet-class>demo.SimpleServiceImpl</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>JAX-WS Servlet</servlet-name>
        <url-pattern>/SimpleService</url-pattern>
    </servlet-mapping>

  <!-- The welcome file -->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>

Калькулятор класса Java.java

package demo;

import javax.faces.bean.*;

import org.springframework.stereotype.Component;

@ManagedBean
@Component
@ViewScoped
public class Calculator implements java.io.Serializable{

      private static final long serialVersionUID = -3832235132261771583L;

      private int _a;
      private int _b;

      public int getA() { return _a; }
      public void setA(int a) { _a = a; }

      public int getB() { return _b; }
      public void setB(int b) { _b = b; }

      public int getSum()
      {
        return _a + _b;
      }

}

Библиотеки, которые я использую: Использование Richfaces 4.3.4 Spring Security 3.1.3 JSTL 1.2.1 Spring 3.2.0.RELEASE


person bearcatFulton    schedule 30.01.2014    source источник
comment
вы должны ответить на свой вопрос. если вы этого не сделаете, у меня может возникнуть соблазн ответить на него за вас, даже если вы придумали решение.   -  person Eric S.    schedule 13.02.2014


Ответы (2)


Поскольку calculator.sum только возвращает номер (и ничего не делает в фоновом режиме), нет смысла вызывать его при нажатии кнопки.

Я не знаю, что вызывает ошибку, но WEB-INF для файлов конфигурации и тому подобного. Если у вас есть (x)html страницы, удалите их.

person Makhiel    schedule 04.02.2014

Чтобы это заработало, должно было произойти несколько вещей.

1) WEB-INF/ из файла webmvc-config.xml под прослушивателем потока.
2) и его нужно было использовать хотя бы для отладки.
3) Форма должна быть в тегах и.
4) URL должен использовать веб-поток

http://localhost:8080/CLPWeb/spring/grantSearchFlow?test

  rather than

http://localhost:8080/CLPWeb/spring/WEB-INF/templates/views/test.xhtml

Использовал URL-адрес как код, чтобы проверить его.

person bearcatFulton    schedule 14.02.2014