2013-12-10 2 views
0

JSP와 해당 Action 클래스에서 참조하는 속성에 isEmpty()를 호출하면 NullPointerException이 발생합니다.struts 속성 매핑에서 NullPointerException이 발생했습니다.

JSP :

<%@ page contentType="text/html; charset=UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%@ taglib prefix="s" uri="/struts-tags"%> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Registrieren - WebShop 2.0</title> 
<s:head /> 
</head> 
<body> 

    <b><s:text name="welcome.title" /></b> 

    <s:form action="UserRegister" focusElement="firstname"> 
     <s:textfield name="firstname" key="prompt.firstname" size="20" 


required="true" /> 
    <s:textfield name="lastname" key="prompt.lastname" size="20" 
     required="true" /> 
    <s:textfield name="username" key="prompt.username" size="20" 
     required="true" /> 
    <s:password name="password" key="prompt.password" size="20" 
     required="true" /> 
    <br> 

    <s:submit method="execute" value="Registrieren" align="right" /> 
</s:form> 

<font color="red"> <s:actionerror label="label" /> 
</font> 

Action 클래스 :

package vislabWebShop.controller; 

import vislabWebShop.model.User; 

import com.opensymphony.xwork2.ActionSupport; 

public class RegisterAction extends ActionSupport 
{ 
    private static final long serialVersionUID = -983183915002226000L; 

    private String firstname; 
    private String lastname; 
    private String username; 
    private String password; 

    @Override 
    public String execute() throws Exception 
    { 
    if(getFirstname().isEmpty() || getLastname().isEmpty() || getUsername().isEmpty() || getPassword().isEmpty()) 
    { 
     addActionError(getText("error.register.complete")); 
     return INPUT; 
    } 
    else 
    { 
     User registeredUser = new User(); 
     registeredUser.setFirstname(getFirstname()); 
     registeredUser.setLastname(getLastname()); 
     registeredUser.setUsername(getUsername()); 
     registeredUser.setPassword(getPassword()); 

     addActionMessage(getText("success.register.user")); 
     return SUCCESS; 
    } 
    } 

    public String getLastname() 
    { 
    return lastname; 
    } 

    private void setLastname(String lastname) 
    { 
    this.lastname = lastname; 
    } 

    public String getFirstname() 
    { 
    return firstname; 
    } 

    private void setFirstname(String firstname) 
    { 
    this.firstname = firstname; 
    } 

    public String getUsername() 
    { 
    return (this.username); 
    } 

    public void setUsername(String username) 
    { 
    this.username = username; 
    } 

    public String getPassword() 
    { 
    return (this.password); 
    } 

    public void setPassword(String password) 
    { 
    this.password = password; 
    } 
} 

struts.xml :

<?xml version="1.0" encoding="UTF-8" ?> 
<!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.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="false" /> 
    <constant name="struts.custom.i18n.resources" value="ApplicationResources" /> 

    <!-- Add packages here --> 

     <package name="vislabWebShop" extends="struts-default"> 

     <!-- Add your actions here --> 

     <action name="UserForward"> 
      <result>/pages/Login.jsp</result> 
     </action> 

     <action name="UserLogin" class="vislabWebShop.controller.LoginAction"> 
      <result name="success">/pages/Welcome.jsp</result> 
      <result name="input">/pages/Login.jsp</result> 
     </action> 

     <action name="UserRegister" class="vislabWebShop.controller.RegisterAction"> 
      <result name="success">/pages/Login.jsp</result> 
      <result name="input">/pages/Register.jsp</result> 
     </action> 

     <action name="UserRegisterNew"> 
      <result>/pages/Register.jsp</result> 
     </action> 
    </package> 


</struts> 

두 속성이 사점 매핑됩니다. 속성을 다른 양식에서도 복제 할 수 있습니까?

+0

예외를 throw하는 행은 무엇입니까? – Vitruvius

+0

@Saposhiente if (getFirstname().) getEnpty(). getLastname(). –

+0

@ MarcelHöll 처음 실행하면 해당 필드는 기본적으로 'null'입니다. 'private String firstname = "";; 또는'getFirstname() == null'과 같은'null '을 확인하십시오. – Smit

답변

0

다음은 실수입니다. RegisterAction.java에서 에 setter 메서드를 넣었으므로이 메서드는 struts에서 호출 할 수 없습니다. 그들을 public으로 바꾸면 문제가 해결됩니다.

관련 문제