2016-04-07 2 views
0

Situation: Je suis en train de développer un webapp MVC à ressorts et d'utiliser le flux de ressorts et la charpente de carreaux. J'ai deux tables dans DB customer et customerAdress et j'ai deux classes de modèle pour eux nommés customerModel et customerAdressModel.comment lier plusieurs modèles à une seule vue dans le flux Web de printemps?

Maintenant, dans mon flow.xml i ont les éléments suivants view-state:

<var name = "cust" class = "com.model.CustomerModel"/> 

<view-state id = "customerViewState" view = "customer" model = "cust"> 

     <transition on="next" to="customerData"/> 

    </view-state> 

cadre de carreaux résout la vue customer de s'approprier customer.jsp qui est indiqué ci-dessous:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
"http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
</head> 
<body> 

<div> 
<form id="Form" method="post" enctype="multipart/form-data" class="form- 
inline">  
    <div class="inputDiv"> 

      <label class="inputLabel"> Name :</label> 
      <input type="text" name="name" id="name">   



      <label class="inputLabel">Email :</label> 
      <input type="email" name="email" id="email"> 

    </div>    
    <input type="button" id="forwardButton" value="Next"/> 
</form> 
</div> 

</body> 
<script> 

$("#forwardButton").click(function(){ 

$("#WlDetailsForm").attr('action','${flowExecutionUrl}&_eventId=next'); 
    $("#WlDetailsForm").submit(); 

}); 
</script> 
</html> 

Problème: Maintenant, la formulaire spécifié dans customer.jsp a quelques champs d'entrée qui contient la valeur des propriétés de customerAdressModel. Donc je veux lier customerModel ainsi que customerAdressModel dans le même état d'affichage customerViewState. Comment puis-je faire cela, je suis allé à travers le printemps DOC, mais je ne pouvais rien trouver, s'il vous plaît aider!

Note: je ne peux pas modifier mon sql tables

Répondre

0

Vous pouvez créer le modèle composite DTO

public class CompositeModelDto { 

    private CustomerModel suctomer; 

    private CustomerAddressModel address; 

    //setters ang getters ... 

} 

et l'utiliser comme une vue modèle d'état

<var name = "cust" class = "com.model.CustomerModel"/> 
<var name = "address" class = "com.model.CustomerAddressModel"/> 
<var name = "customerDto" class = "com.model.CompositeModelDto"/> 

<view-state id = "customerViewState" view = "customer" model = "customerDto"> 
    <on-entry> 
     <set name="customerDto.customer" value="cust"/> 
     <set name="customerDto.address" value="address"/> 
    </on-entry> 

    <transition on="next" to="customerData"/> 

</view-state> 


MISE À JOUR
Pour les vues, je suggère d'utiliser la bibliothèque de balises de formulaire de Spring. Définir taglib

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 

et remplacer forme dans votre jsp avec

<form:form method="POST" action="${flowExecutionUrl}&_eventId=next" modelAttribute="customerDto"> 
    <table> 
    <tr> 
     <td><form:label path="customer.name">Name</form:label></td> 
     <td><form:input path="customer.name" /></td> 
    </tr> 
    <tr> 
     <td><form:label path="customer.email">Email</form:label></td> 
     <td><form:input path="customer.email" /></td> 
    </tr> 
    <tr> 
     <td><form:label path="address.addressLine1">Address Line 1</form:label></td> 
     <td><form:input path="address.addressLine1" /></td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <input type="submit" value="Submit"/> 
     </td> 
    </tr> 
    </table> 
</form:form> 
+0

ce sont les déclarations établies font, pourquoi sont-ils nécessaires? –

+0

@varunsinghal L'instruction 'set' définit le résultat de l'expression' value' à l'attribut défini dans 'name'. '' signifie 'customerDto.setCustomer (cust)'. Les deux ensembles sont nécessaires pour définir le client et l'adresse dans DTO afin de les référencer dans jsp. – Evgeny

+0

un doute, j'ai un service d'affaires qui prend customerModel comme paramètre d'entrée, puis insère ce paramètre d'entrée dans le tableau client. comment pourrais-je réaliser cela ici? puis-je faire comme ceci: cusomerBuisness.createCustomer (customerDto.cust)? aidez s'il vous plaît! –