2016-11-08 2 views
1

Wenn ich versuche, die Werte aus der Klasse abzurufen, die in JSP festgelegt wurden, wird Null angezeigt.Kann JSP-Formularwerte nicht auf Klassenvariablen festlegen

folgende Fehler wird in den Entwicklermodus beobachtet:

ERROR ParametersInterceptor Entwickler-Mitteilung (Set struts.devMode auf false Diese Nachricht deaktivieren): unerwartete Ausnahme gefangen 'name' auf ‚Klasse org.ravi Einstellung. EmployeeAction: Fehler beim Setzen Ausdruck 'name' mit dem Wert 't'

Hier sind meine verschiedenen Seiten

struts.xml

<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <constant name="struts.devMode" value="true" /> 
    <package name="default" extends="struts-default"> 
     <action name="addEmployeeAction" class="org.ravi.EmployeeAction"> 
      <interceptor-ref name="params" /> 
      <interceptor-ref name="modelDriven"/> 
      <result name="success">/Add.jsp</result> 
     </action> 
     <action name="EmployeeAction" class="org.ravi.EmployeeAction" method="execute"> 
      <interceptor-ref name="params" /> 
      <interceptor-ref name="modelDriven"/> 
      <result name="success">/index.jsp</result> 
     </action> 
    </package> 
</struts> 

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1" import="java.util.*,java.io.*"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%@taglib uri="/struts-tags" prefix="s"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
</head> 
<body> 

    <s:form action="Add.jsp" name="addForm"> 
     <table border="1" cellpadding="5"> 
      <tr> 
       <th>Select</th> 
       <th>EmpID</th> 
       <th>Name</th> 
       <th>City</th> 
       <th>DoB</th> 
      </tr> 

      <tr> 
       <th><input type="radio" name="record" 
        onClick="radioValidate(this, 'record')" value="%{var}"> 
       </th> 
       <th><s:property value="empid"/></th> 
       <th><s:property value="name"/></th> 
       <th><s:property value="city"/></th> 
       <th><s:property value="dob"/></th> 
    </s:form> 
</body> 
</html> 

Add.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%@taglib uri="/struts-tags" prefix="s"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <h1>Add New User</h1> 
    <s:form action="EmployeeAction" > 
    <s:textfield label="Emp Id" name="empid" /> 
    <s:textfield label="Name" name="name" /> 
    <s:textfield label="City" name="city" /> 
    <s:textfield label="DoB" name="dob" />   
    <s:submit /> 
    </s:form> 
</body> 
</html> 

EmployeeAction.java

package org.ravi; 

import com.opensymphony.xwork2.ActionSupport; 
import com.opensymphony.xwork2.ModelDriven; 

public class EmployeeAction extends ActionSupport implements ModelDriven<Employee> { 
    private static final long serialVersionUID = -8136507522861159378L; 

    private Employee employee=new Employee(); 

    public Employee getEmployee() 
    { 
     return employee; 

    } 

    public void setEmployee(Employee employee) 
    { 
     this.employee=employee; 
    } 

    public String execute() throws Exception 
    { 
     return SUCCESS; 
    } 

    @Override 
    public Employee getModel() 
    { 
     return employee; 
    } 
} 

Employee.java

package org.ravi; 

import java.io.Serializable; 

public class Employee implements Serializable{ 

    static final long serialVersionUID = 1L; 
    private String empid; 
    private String name; 
    private String city; 
    private String dob; 

    public void setempid(String empid) { 
     this.empid = empid; 
    } 

    public void setname(String name) { 
     this.name = name; 
    } 

    public void setcity(String city) { 
     this.city = city; 
    } 

    public void setdob(String dob) { 
     this.dob = dob; 
    } 

    public String getempid() { 
     return this.empid; 
    } 

    public String getname() { 
     return this.name; 
    } 

    public String getcity() { 
     return this.city; 
    } 

    public String getdob() { 
     return this.dob; 
    } 


} 

Antwort

2

Sie mehrere Fehler sind zu begehen, ist das Schlimmste, dass

  • Sie Getter und Setter manuell sind zu erzeugen (eine Menge nutzloser Arbeit), und Sie tun es auch falsch: den ersten Buchstaben des

    setName( statt setname( für variable name: der Variablenname muss groß geschrieben werden.

    Sie soll (die Einfachheit und Konsistenz) tut es auch für jedes Wort Ihrer Variablen mit mehr als einem Wort:

    setEmpId( für variable empId.

    Sie sollten auch die Redundanz möglichst vermeiden. Wenn Sie ein ID-Feld auf einer Klasse Employee haben, rufen Sie einfach id, nicht empId ... Wenn es in Emp ist, ist es offensichtlich, es ist Emp-ID und nicht etwas anderes ID.

  • Verwenden Sie ModelDriven nur, wenn Sie Schmerzen genießen. Für jeden anderen Zweck ist es so nützlich wie eine Wurst in der Tasche, wenn man sich einer Gruppe hungriger Straßenhunde gegenübersieht.

  • Verwenden Sie die HTML5 DTD <!DOCTYPE html> auch, wenn Sie auf alte Browser zielen, gibt es keine Notwendigkeit, 4.01 heutzutage zu verwenden.

  • Niemals JSPs wie in Ihrer ersten Form direkt aufrufen, Aktionen immer zuerst ausführen.

Beginnen Sie damit. Es gibt viel mehr.


lesen Must

+1

Und der Interceptor-Stack. –

+1

Dies benötigt "Bean" und "CamelCase" Link, um abgeschlossen zu sein. – AxelH

+0

Ich habe sie so oft hinzugefügt:/Ich habe es jetzt auch getan @AxelH, der Vollständigkeit halber ... :) –

3
public void setname(String name) { 
     this.name = name; 
    } 

Sie müssen richtig all diese zu nennen, das heißt setName (String name) gleiche gilt für setEmpId und so weiter. Struts können Ihre Getter/Setter nicht finden, weil sie den Namenskonventionen nicht folgen.

Verwandte Themen