2016-05-23 5 views
0

Ich habe eine Feder MVC Form, die auf POST die Fehler behandelt und zeigt sie korrekt auf dem Formular (Zeigt die Fehler auf der gleichen Seite und nicht die Daten aus dem Formular löschen) . Ich möchte auch eine Erfolgsnachricht auf dem Formular bei erfolgreicher Transaktion hinzufügen und auch den Formularinhalt löschen.Spring MVC Formular - hinzufügen Erfolg Nachricht und löschen Formular

Ich habe keine Ahnung, wie mit der Erfolgsmeldung umzugehen. Ich habe versucht, es als ein Fehler an das Formular übergeben, aber das wird in roter Farbe angezeigt, die die Farbe ist, die ich für Fehler verwendet habe. Ich kann die Farbe für diese Nachricht nicht in Grün ändern. Hier

  model.addAttribute("serverError", "Transaction inserted Successfully !"); 
    return "checkinout"; 

ist mein Code-

.css-

.plErroMessage{margin-left:185px;color:white;background-color:red;width:165px;padding: 4px;} 

checkinout.jsp

<div class="devices"> 
    <form:form method="post" id="assetForm" modelAttribute="inOutTransaction" action="/DeviceManager/assets"> 
     <form:errors path="*" cssClass="plErroMessage" element="div" /> 
     <br> 
     <c:if test="${not empty serverError}"> 
      <div id="serverError" class="plErroMessage">${serverError}</div> 
     </c:if> 
     <form:hidden path="actionId"/> 
     <div> 
      <div class="plLabelSearch">User Id:</div> 
      <div class="plinput"><form:input path="userId" size="29"/></div> 
     </div> <!-- More Code follows --> 

-Controller

@RequestMapping(value="/assets", method = RequestMethod.POST) 
public String checkInOut(@ModelAttribute("inOutTransaction") @Validated InOutTransaction inOutTransaction, BindingResult result, Model model, Locale locale) { 
    try { 
     if(result.hasErrors()){ 
      return "checkinout"; 
     } 
     InOutTransactionDO inOutTransactionDO = new InOutTransactionDO(); 
/*CODE*/ 
     if(employeeInfoDO == null){ 
      model.addAttribute("serverError", "User "+ inOutTransaction.getUserId()+" does not exist !"); 
      return "checkinout"; 
     } 
/*CODE*/ 
     if(deviceMasterDO == null){ 
      model.addAttribute("serverError", "Device Id "+ inOutTransaction.getAssetTagNumber()+" not found !"); 
      return "checkinout";   
     } 
     inOutTransactionService.saveTransaction(inOutTransactionDO); 
     model.addAttribute("serverError", "Transaction inserted Successfully !"); 
     return "checkinout"; 
      } catch (Exception e) { 
      model.addAttribute("serverError", e.toString()); 
      return "checkinout"; 
      } 
} 
+0

Wenn ich beschließe, die Erfolgsmeldung als Fehler zu senden, wie kann die CSS dafür ändern? –

Antwort

0

Es könnte bessere Lösungen geben, aber das ist mir in der Vergangenheit schon aufgefallen.

1) hinzufügen HttpServletRequest Anfrage in Parameter

@RequestMapping(value="/assets", method = RequestMethod.POST) 
public String checkInOut(@ModelAttribute("inOutTransaction") @Validated InOutTransaction inOutTransaction, 
BindingResult result, Model model, Locale locale, HttpServletRequest request) { 
try { 
    if(result.hasErrors()){ 
     return "checkinout"; 
    } 
    InOutTransactionDO inOutTransactionDO = new InOutTransactionDO(); 
/*CODE*/ 
    if(employeeInfoDO == null){ 
     model.addAttribute("serverError", "User "+ inOutTransaction.getUserId()+" does not exist !"); 
     return "checkinout"; 
    } 
/*CODE*/ 
    if(deviceMasterDO == null){ 
     model.addAttribute("serverError", "Device Id "+ inOutTransaction.getAssetTagNumber()+" not found !"); 
     return "checkinout";   
    } 
    inOutTransactionService.saveTransaction(inOutTransactionDO); 
    request.getSession().setAttribute("successMessage", "Transaction inserted Successfully !"); 
    return "checkinout"; 
     } catch (Exception e) { 
     model.addAttribute("serverError", e.toString()); 
     return "checkinout"; 
     } 
} 

2) In die Erfolgsmeldung an jsp und deaktivieren Sie die Session-Variablen am Ende der jsp

<div class="devices"> 
<form:form method="post" id="assetForm" modelAttribute="inOutTransaction" action="/DeviceManager/assets"> 
    <form:errors path="*" cssClass="plErroMessage" element="div" /> 
    <c:if test="${not empty successMessage}"> 
     <div id="serverError" class="successMessage">${successMessage}</div> 
    </c:if>   
    <br> 
    <c:if test="${not empty serverError}"> 
     <div id="serverError" class="plErroMessage">${serverError}</div> 
    </c:if> 
    <form:hidden path="actionId"/> 
    <div> 
     <div class="plLabelSearch">User Id:</div> 
     <div class="plinput"><form:input path="userId" size="29"/></div> 
    </div> 

<c:remove var="successMessage" scope="session" /> 

3) Erstellen Sie neue CSS für den Erfolg Meldung

4) Um das Formular bei Erfolg zu löschen, leiten Sie entweder die Seite um oder senden das neue leere Objekt an die Ansicht.

Der Grund, warum ich die Erfolgsmeldung in httpSession anstelle von model gesetzt habe, liegt daran, dass spring standardmäßig die Modellattribute der URL bei der Umleitung anfügt. Wenn Sie nicht umleiten möchten und das leere Objekt senden möchten, fügen Sie auch model.addAttribute hinzu.

+0

Ich habe die Erfolgsnachricht zu model.addAttribute hinzugefügt und sie im Formular mit meinem erforderlichen CSS-Format angezeigt. –