MadM
Mitglied
Moin,
ein neues Problem bei meinem ersten Struts-Projekt:
Ich will einen neuen Datensatz anlegen. Dazu lade ich Formular, das eine ActionForm verwendt. Mein Problem ist nun, dass die validate()-Methode der ActionForm bereits aufgerufen wird, bevor ich die Action zum Speichern auslöse. Es sollte ja aber so sein, dass ich meine Eingaben mache und erst nach drücken des Speichern-Buttons validiert wird. Der Aufruf der Seite zum Erstellen des neuen Datensatzes erfolgt über /editProject.do?do=create.
Ich bekomme dann eine Exception:
java.lang.NullPointerException
de.twinsoft.prototype.struts.form.EditProjectForm.validate(EditProjectForm.java:67)
org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:942)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
Ich gehe mal davon aus dass es sich um ein Problem handelt, das mit der grundsätzlichen Arbeitsweise von Struts zusammenhängt. Für eine Erläuterung/ Lösung wäre ich sehr dankbar.
Gruß
Matthias
struts-config.xml
editProject.jsp
EditProjectAction
editProjectForm
ein neues Problem bei meinem ersten Struts-Projekt:
Ich will einen neuen Datensatz anlegen. Dazu lade ich Formular, das eine ActionForm verwendt. Mein Problem ist nun, dass die validate()-Methode der ActionForm bereits aufgerufen wird, bevor ich die Action zum Speichern auslöse. Es sollte ja aber so sein, dass ich meine Eingaben mache und erst nach drücken des Speichern-Buttons validiert wird. Der Aufruf der Seite zum Erstellen des neuen Datensatzes erfolgt über /editProject.do?do=create.
Ich bekomme dann eine Exception:
java.lang.NullPointerException
de.twinsoft.prototype.struts.form.EditProjectForm.validate(EditProjectForm.java:67)
org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:942)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
Ich gehe mal davon aus dass es sich um ein Problem handelt, das mit der grundsätzlichen Arbeitsweise von Struts zusammenhängt. Für eine Erläuterung/ Lösung wäre ich sehr dankbar.
Gruß
Matthias
struts-config.xml
Code:
[...]
<action
attribute="editProjectForm"
input="/jsp/editProject.jsp"
name="editProjectForm"
parameter="do"
path="/editProject"
scope="session"
type="de.twinsoft.prototype.struts.action.EditProjectAction"
validate="true">
<forward
name="projectList"
path="/listProjects.do"
redirect="true" />
<forward
name="editProject"
path="/jsp/editProject.jsp" />
</action>
[...]
Code:
<html:form action="/editProject">
<html:hidden property="project.projektId" />
<html:hidden property="do" value="saveProject" />
<TABLE border="1" cellpadding="5" cellspacing="0" bgcolor="#ffffff" width="500">
<TR>
<TH>
Basisnummer:
</TH>
<TD>
<html:text property="project.basisnummer" />
</TD>
<TD>
<html:errors property="basisnummer" />
</TD>
</TR>
<TR>
<TH>
Name:
</TH>
<TD>
<html:text property="project.name" />
</TD>
<TD>
<html:errors property="name" />
</TD>
</TR>
<TR>
<TH>
Beginn:
</TH>
<TD>
<html:text property="project.beginn" />
</TD>
<TD>
</TD>
</TR>
<TR>
<TH>
Ende:
</TH>
<TD>
<html:text property="project.ende" />
</TD>
<TD>
</TD>
</TR>
<TR>
<TH>
Typ:
</TH>
<TD>
<html:select property="project.typ">
<html:option key="intern" value="intern" />
<html:option key="extern" value="extern" />
</html:select>
</TD>
<TD>
</TD>
</TR>
<TR>
<TR>
<TH>
Beschreibung
</TH>
<TD>
<html:textarea property="project.beschreibung" rows="10" cols="40" />
</TD>
<TD>
</TD>
</TR>
</TABLE> <BR>
<br />
<br />
<html:submit />
<html:cancel />
</html:form>
Code:
public class EditProjectAction extends DispatchAction {
ProjektDAO projektDAO = new ProjektDAO();
private static final Log log = LogFactory.getLog(EditProjectForm.class);
public ActionForward prepareEdit(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
log.info("ACTION: prepareEdit");
Integer id = Integer.valueOf(request.getParameter("projektId"));
((EditProjectForm) form).setProject(projektDAO.findById(id));
return mapping.findForward("editProject");
}
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
log.info("ACTION: delete");
Integer id = Integer.valueOf(request.getParameter("projektId"));
projektDAO.delete(projektDAO.findById(id));
return mapping.findForward("projectList");
}
public ActionForward saveProject(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
EditProjectForm editProjectForm = (EditProjectForm) form;
log.info("ACTION: saveProject");
projektDAO.save(editProjectForm.getProject());
return mapping.findForward("projectList");
}
public ActionForward create(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
log.info("ACTION: create");
((EditProjectForm) form).setProject(new Projekt());
return mapping.findForward("editProject");
}
}
Code:
public class EditProjectForm extends ActionForm {
// --------------------------------------------------------- Instance
// Variables
private Projekt project = new Projekt();
private static final Log log = LogFactory.getLog(EditProjectForm.class);
/**
* @return Returns the project.
*/
public Projekt getProject() {
return project;
}
/**
* @param project
* The project to set.
*/
public void setProject(Projekt project) {
this.project = project;
}
public boolean equals(Object obj) {
return project.equals(obj);
}
public void reset(ActionMapping arg0, HttpServletRequest arg1) {
this.project = new Projekt();
}
public int hashCode() {
return project.hashCode();
}
public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) {
log.info("validate");
ActionErrors errors = null;
errors = new ActionErrors();
if (project.getBasisnummer().intValue() < 10000000) {
errors.add("basisnummer", new ActionError("error.basisnummer"));
}
if (project.getName().length() < 5) {
errors.add("name", new ActionError("error.projekt.name"));
}
if (project.getBeginn().after(project.getEnde())) {
errors.add("beginnBeforeEnd", new ActionError("error.projekt.beginnBeforeEnd"));
}
return errors;
}
}
Zuletzt bearbeitet: