2015-05-03 8 views
5

Ich arbeite an einem Struts 2-Projekt, das Problem ist, dass ich <constant name="struts.ui.theme" value="simple"/> in meinem struts.xml für das Layout meiner JSP-Seite verwenden (z. B. 2-3 Textfiled in einer Zeile mit Tablecode anordnen)) gemäß dem angewendeten CSS, aber ich bin nicht in der Lage, den Validierungsfehler auf derselben jsp-Seite aufgrund von theme="simple" anzuzeigen.Die Validierung und Thema in Struts 2

Konfiguration:

<struts> 
    <!-- Configuration for the default package. --> 
    <constant name="struts.ui.theme" value="simple"/> 
    <package name="default" extends="struts-default"> 
     <action name="validateUser" class="login.LoginAction"> 
      <result name="SUCCESS">/welcome.jsp</result> 
      <result name="input">/login.jsp</result> 
     </action> 
    </package> 
</struts> 

Aktion:

public class LoginAction extends ActionSupport{ 

    private String username; // getter and setter 
    private String password; // getter and setter 


    @Override 
    public String execute() { 
     // some business logic here.... 
     return "SUCCESS";  
    } 
    //simple validation 
    @Override 
    public void validate(){    
     if("".equals(getUsername())){ 
      addFieldError("username", getText("username.required")); 
     } 
     if("".equals(getPassword())){ 
      addFieldError("password", getText("password.required")); 
     } 
    }  
} 

Ausblick:

<s:form action="validateUser" validate="true" > 
    <table> 
     <tr> 
      <td>username</td> 
      <td><s:textfield label="username" name="username" /><td/> 
     </tr> 
     <tr> 
      <td>password</td> 
      <td><s:password label="password" name="password" /><td/> 
     <tr> 
      <td> <s:submit label="submit" name="submit"/></td> 
     </tr> 
    </table> 
</s:form> 

Gibt es eine Möglichkeit zu halten das Layout mit meinem CSS und benutze auch Struts 2 Validierung?

Antwort

3

Sicher! Das XHTML-Design fügt automatisch ein fieldError-Tag zu Ihren Eingabe-Tags hinzu.

wenn das einfache Thema verwenden, stattdessen müssen Sie sie manuell, hinzuzufügen und eine id Ihre Tags geben ihnen übereinstimmen (es sei denn, es automatisch generiert werden würde, und mehr schwer zu erkennen):

<td> 
    <s:textfield id="username" label="username" name="username" /> 
    <s:fielderror fieldName="username" /> 
</td> 

<td> 
    <s:password id="password" label="password" name="password" /> 
    <s:fielderror fieldName="password" /> 
</td> 

PS: nur ich denke, diese sind in den Tippfehler und Fehler in der Frage sind, und nicht in der realen Code, aber Sie haben:

  • selbstschließend <td/>,
  • eine unverschlossene <tr> und
  • eine <tr> mit einer einzigen <td> ohne eine colspan="2" angegeben.