2016-10-06 1 views
0

Ich bin newbee in Spring Web Flow. Ich habe ein Beispielprojekt mit Federbahnfluss erstellt. Von der Homepage aus wird die mvc-Controller-Methode gemäß der Erwartung ausgeführt und erreicht die zweite Seite. Von der zweiten Seite muss beim Klicken auf "Senden" ein Bewertungsausdruck ausgeführt werden. Stattdessen wird die zuerst ausgeführte Methode erneut ausgeführt. Ich konnte sehen, dass die Aktion auf dem Formular nur $ {flowExecutionUrl} ist. RequestMapping erhält also dieselbe URL. Daher die alte Methode ausführen.Anstatt Evaluierungsausdruck auszuführen, wird die mvc-Controller-Methode ausgeführt - Spring Web Flow

  1. Ist es möglich, uri im Aktionsattribut zu ändern und dann $ {flowExecutionUrl} anzuhängen.
  2. Wie können wir sicherstellen, dass die Flussdefinitionsdatei

Servlets-context.xml

<context:annotation-config/> 
    <context:component-scan base-package="com.metlife.claim"/> 
    <bean class= 
"org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> 
     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <value> 
       /claim/=flowController 
      </value> 
     </property> 
     <property name="alwaysUseFullPath" value="true"/> 
    </bean> 
     <bean class= 
"org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> 
    <bean class= 
"org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 
     <bean id="viewResolver" class= 
"org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 
     <bean id="flowController" class= 
"org.springframework.webflow.mvc.servlet.FlowController"> 
     <property name="flowExecutor" ref="flowExecutor"/> 
    </bean> 
     <flow:flow-executor id="flowExecutor" flow-registry="flowRegistry"/> 
     <flow:flow-registry id="flowRegistry" 
      flow-builder-services="flowBuilderServices"> 
     <flow:flow-location path="/WEB-INF/flows/claims-flow.xml"/> 
    </flow:flow-registry> 

    <flow:flow-builder-services id="flowBuilderServices" 
      view-factory-creator="viewFactoryCreator"/> 

    <bean id="viewFactoryCreator" class= 
"org.springframework.webflow.mvc.builder.MvcViewFactoryCreator"> 
     <property name="viewResolvers"> 
      <list> 
       <ref bean="viewResolver"/> 
      </list> 
     </property> 
    </bean> 
</beans> 

Anspruch-flow.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.0.xsd"> 

    <!-- <view-state id="claims" view="addClaims"> --> 
    <view-state id="claims" model = "viewScope.claim"> 
    <transition to="claimsEntered" on="submit"> 
     <!-- <evaluate expression="claimController.saveNewClaim(viewScope.claim)"></evaluate> --> 
     </transition> 
     </view-state> 
    <action-state id="claimsEntered"> 
    <evaluate expression="claimController.saveNewClaim(viewScope.claim)"></evaluate> 
    <transition to="claims"></transition> 
    </action-state> 
</flow> 

ClaimController.java Ausführung wird

@Controller 
public class ClaimController { 

    public static List<Claim> claimList = new ArrayList<Claim>(); 

    @RequestMapping(value = "/claims/") 
    public void getClaims(){ 
     System.out.println("Hi Claims"); 
    } 

    public void saveNewClaim(Claim claim){ 
     claimList.add(claim); 
     System.out.println("The claim has been added..."); 
    } 
} 

claims.jsp

<form modelAttribute = "claim" action= "${flowExecutionUrl}"> 
<table> 
<tr> 
<td>Id</td> 
<td><input type = "text" path="id" name = "id"/></td> 
<tr> 
<tr> 
<td>Name</td> 
<td><input type = "text" path="id" name = "name"/></td> 
<tr> 
<tr> 
<td>Age</td> 
<td><input type = "text" path="id" name = "age"/></td> 
<tr> 
<tr> 
<td>Amount</td> 
<td><input type = "text" path="id" name = "amount"/></td> 
<tr> 
<tr> 
<td>Region</td> 
<td><input type = "text" path="id" name = "region"/></td> 
<tr> 
<tr> 
<td> 
<input type = "submit" id = "submit" name = "_eventId_submit" value = "Submit"></td></tr> 
</table> 
</form> 

home.jsp

<body> 
<h1> 
</h1> 
<P> <a href="claims/" >Claims</a> </P> 
</body> 

Auf dem Click-Ereignis von Button von claims.jsp Senden, die er ausführt getClaims() -Methode des ClaimController statt saveNewClaim().

Kann jemand bitte helfen zu erkennen, was bei der Umsetzung falsch ist, wie Sie dieses Problem lösen können. Danke im Voraus

Antwort

0

Ich bin mir nicht sicher über claim-flow.xml, aber Sie können RequestMapping in saveNewClaim-Methode verwenden.

@RequestMapping(value = "/claims/", method = RequestMethod.POST) 
public void saveNewClaim(Claim claim){ 
    claimList.add(claim); 
    System.out.println("The claim has been added..."); 
} 

ich über etw wie diese denken:

@Controller 
public class ClaimController { 

    public static List<Claim> claimList = new ArrayList<Claim>(); 

    @RequestMapping(value = "/claims/", method = RequestMethod.GET) 
    public void getClaims(){ 
     System.out.println("Hi Claims"); 
    } 
    @RequestMapping(value = "/claims/", method = RequestMethod.POST) 
    public void saveNewClaim(Claim claim){ 
     claimList.add(claim); 
     System.out.println("The claim has been added..."); 
    } 
} 

Erste Methode das Formular laden. Die zweite Antwort auf POST-Anfrage von diesem Formular.

+0

Ja. Bei Spring MVC hast du Recht. Wenn wir RequestMapping mit Wert angeben, kommt Web-Flow nicht ins Bild – Mahi

Verwandte Themen