2014-11-19 1 views
1

Я использую struts 2 и tomcat вместе. Проблемы я облицовка: всякий раз, когда я представляю данные, является ли неправильно или нет (имя пользователя и пароль), он делает появляться ВСЕГДА ошибка следующего поля:Ошибка установки выражения 'userBean.password' со значением ['',]

.Error setting expression 'userBean.password' with value ['XXX', ] 
.Error setting expression 'userBean.username' with value ['YYY', ] 

где «XXX» это пароль и «YYY» является Имя пользователя.

Мой класс действия:

package direstruts.action; 

import static com.opensymphony.xwork2.Action.SUCCESS; 
import direstruts.model.UserBean; 

public class LoginAction extends GenericAction { 

    @Override 
    public void validate() { 
     UserBean uB = getUserBean(); 
     if(uB.getUsername().isEmpty()) { 
      addFieldError("userBean.username", "Por favor Insira o Username de Utilizador"); 
     } 
     if(uB.getPassword().isEmpty()) { 
      addFieldError("userBean.password", "Por favor Insira a Password de Utilizador"); 
     } 
    } 

    public String getAuthentication() throws Exception { 
     if(getUserBean().getAuthentication()) { 
      addActionMessage("Log in bem Sucedido!"); 
      return SUCCESS; 
     } 
     addActionError("Utilizador e/ou Password errados e/ou Utilizador já está logado"); 
     return ERROR; 
    } 

    public String setNewUser() throws Exception { 
     if(getUserBean().setNewUser()) { 
      addActionMessage("User registado!"); 
      return SUCCESS; 
     } 
     addActionError("Utilizador Já Existe! Tente Outro Username!"); 
     return ERROR; 
    } 
    public String setQuitUser() throws Exception { 
     if(getUserBean().setQuitUser()) { 
      addActionMessage("User LoggedOut!"); 
      return SUCCESS; 
     } 
     return ERROR; 
    } 

    public UserBean getUserBean() { 
     if(!session.containsKey("userBean")) 
      this.setUserBean(new UserBean()); 
     return (UserBean) session.get("userBean"); 
    } 

    public void setUserBean(UserBean userBean) { 
     session.put("userBean", userBean); 
    } 
} 

Мой JSP является:

<%@ taglib prefix="s" uri="/struts-tags"%> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%><!DOCTYPE html> 
<html> 
    <head> 

     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <link rel="stylesheet" type="text/css" href="css/styles.css"> 
     <title>MeeTO</title> 
    </head> 
    <body> 

     <s:form action="loginAction" method="post" > 
      <s:label cssClass="login" value="Please fill in the form below in order to Register or Log in:" /> <br> 

      <s:label for="userBean.username" value="Username:"/> 
      <s:textfield name="userBean.username" /> <br> 

      <s:label for="userBean.password" value="Password:"/> 
      <s:password name="userBean.password" /> <br> 

      <s:submit value="LogIn" action="loginAction" /> <br> 
      <s:submit value="Register" action="registerAction" /> <br> 
     </s:form> 

     <s:fielderror/> 
     <s:actionerror/> 
     <s:actionmessage/> 
    </body> 
</ 

Мой боб:

package direstruts.model; 

import cliente.replies.ReplyLogin; 
import cliente.replies.ReplyObj; 
import cliente.requests.lookup.GetAuthentication; 
import cliente.requests.modify.SetNewUser; 
import cliente.requests.modify.SetQuitUser; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.MalformedURLException; 
import java.rmi.Naming; 
import java.rmi.NotBoundException; 
import java.rmi.RemoteException; 
import java.util.Properties; 
import servidorRMI.ExecuteCommands; 

public class UserBean { 
    ExecuteCommands eC; 
    private static String ip_RMI = "127.0.0.1"; 
    private static int serverRMI = 1099; 
    private static InputStream in; 
    private String username; 
    private String password; 
    private int idUser; 

    public UserBean() { 
     readProperties(); 
    } 

    public String getUsername() { 
     return username; 
    } 

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

    public String getPassword() { 
     return password; 
    } 

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

    public int getIdUser() { 
     return this.idUser; 
    } 

    public void setIdUser(int idUser) { 
     this.idUser = idUser; 
    } 

    public boolean getAuthentication() { 
     GetAuthentication gA = new GetAuthentication(getUsername(), getPassword(), 0); 
     ReplyLogin rL = null; 
     boolean cond = false; 
     do{ 
      try { 
       eC = (ExecuteCommands)Naming.lookup("rmi://" + ip_RMI + ":" + serverRMI + "/ServerRMI"); 
       rL = eC.getAuthentication(gA); 
       cond = false; 
      } catch (RemoteException ex) { 
       System.err.println("Erro no servidor RMI Remote! A tentar restablecer a ligação!"); 
       cond = true; 
      } catch (NotBoundException ex) { 
       System.err.println("Erro no servidor RMI NotBound! A tentar restablecer a ligação!"); 
       cond = true; 
      } catch (MalformedURLException ex) { 
       System.err.println("Erro no servidor RMI MalformedURL! A tentar restablecer a ligação!"); 
       cond = true; 
      } 
     } while(cond); 
     setIdUser(rL.getIdUser()); // Faz set ao idUser para poder ser usado nos pedidos subsequentes 
     return rL.isHasRegister(); 
    } 

    public boolean setNewUser() { 
     SetNewUser sNU = new SetNewUser(getUsername(), getPassword(), 0); 
     boolean cond = false; 
     ReplyObj rO = null; 
     do{ 
      try { 
       eC = (ExecuteCommands)Naming.lookup("rmi://" + ip_RMI + ":" + serverRMI + "/ServerRMI"); 
       rO = eC.setNewUser(sNU); 
       cond = false; 
      } catch (RemoteException ex) { 
       System.err.println("Erro no servidor RMI Remote! A tentar restablecer a ligação!"); 
       cond = true; 
      } catch (NotBoundException ex) { 
       System.err.println("Erro no servidor RMI NotBound! A tentar restablecer a ligação!"); 
       cond = true; 
      } catch (MalformedURLException ex) { 
       System.err.println("Erro no servidor RMI MalformedURL! A tentar restablecer a ligação!"); 
       cond = true; 
      } 
     } while(cond); 
     return rO.getSuccess(); 
    } 

    public boolean setQuitUser() { 
     SetQuitUser sQU = new SetQuitUser(idUser, 0); 
     boolean cond = false; 
     ReplyObj rO = null; 
     do{ 
      try { 
       eC = (ExecuteCommands)Naming.lookup("rmi://" + ip_RMI + ":" + serverRMI + "/ServerRMI"); 
       rO = eC.setQuitUser(sQU); 
       cond = false; 
      } catch (RemoteException ex) { 
       System.err.println("Erro no servidor RMI Remote! A tentar restablecer a ligação!"); 
       cond = true; 
      } catch (NotBoundException ex) { 
       System.err.println("Erro no servidor RMI NotBound! A tentar restablecer a ligação!"); 
       cond = true; 
      } catch (MalformedURLException ex) { 
       System.err.println("Erro no servidor RMI MalformedURL! A tentar restablecer a ligação!"); 
       cond = true; 
      } 
     } while(cond); 
     return rO.getSuccess(); 
    } 

    static public void readProperties() { 
     try { 
      Properties properties = new Properties(); 
      in = UserBean.class.getClassLoader().getResourceAsStream("app.properties"); 
      properties.load(in); 
      ip_RMI = properties.getProperty("serverRMI.address"); 
      serverRMI = Integer.parseInt (properties.getProperty("serverRMI.port")); 
     } catch(IOException e) { 
      System.err.println("Erro a ler o ficheiro .properties!"); 
     } finally { 
      if(in != null) { 
       try { 
        in.close(); 
       } catch(IOException e) {System.out.println("Erro a fechar!"); } 
      } 
     } 
    } 
} 

Вот Tomcat Log:

19-Nov-2014 14:21:04.618 WARNING [http-apr-8080-exec-109] com.opensymphony.xwork2.util.logging.jdk.JdkLogger.warn Parameter [action:loginAction] is on the excludeParams list of patterns! 
19-Nov-2014 14:21:05.086 SEVERE [http-apr-8080-exec-109] null.null Notificação para o Desenvolvedor (altere o paramêtro struts.devMode para false para desabilitar esta mensagem): 
Unexpected Exception caught setting 'userBean.password' on 'class direstruts.action.LoginAction: Error setting expression 'userBean.password' with value ['YYY', ] 
19-Nov-2014 14:21:05.101 SEVERE [http-apr-8080-exec-109] null.null Notificação para o Desenvolvedor (altere o paramêtro struts.devMode para false para desabilitar esta mensagem): 
Unexpected Exception caught setting 'userBean.username' on 'class direstruts.action.LoginAction: Error setting expression 'userBean.username' with value ['XXX', ] 
19-Nov-2014 14:21:05.210 WARNING [http-apr-8080-exec-109] com.opensymphony.xwork2.util.logging.jdk.JdkLogger.warn Caught an exception while evaluating expression 'userBean.username' against value stack 
Caught an Ognl exception while getting property userBean - Class: ognl.OgnlRuntime 
File: OgnlRuntime.java 
Method: getMethodValue 
Line: 1456 - ognl/OgnlRuntime.java:1456:-1 
    at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:143) 
    at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2317) 
    at ognl.ASTProperty.getValueBody(ASTProperty.java:114) 
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) 
    at ognl.SimpleNode.getValue(SimpleNode.java:258) 
    at ognl.ASTChain.getValueBody(ASTChain.java:141) 
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) 
    at ognl.SimpleNode.getValue(SimpleNode.java:258) 
    at ognl.Ognl.getValue(Ognl.java:494) 
    at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:255) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.getValue(OgnlValueStack.java:358) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValue(OgnlValueStack.java:347) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValueWhenExpressionIsNotNull(OgnlValueStack.java:322) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:308) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:366) 
    at com.opensymphony.xwork2.util.TextParseUtil$1.evaluate(TextParseUtil.java:157) 
    at com.opensymphony.xwork2.util.OgnlTextParser.evaluate(OgnlTextParser.java:49) 
    at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:167) 
    at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:112) 
    at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:85) 
    at org.apache.struts2.components.Component.findValue(Component.java:353) 
    at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:813) 
    at org.apache.struts2.components.UIBean.end(UIBean.java:544) 
    at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42) 
    at org.apache.jsp.loginPage_jsp._jspx_meth_s_005ftextfield_005f0(loginPage_jsp.java:273) 
    at org.apache.jsp.loginPage_jsp._jspx_meth_s_005fform_005f0(loginPage_jsp.java:182) 
    at org.apache.jsp.loginPage_jsp._jspService(loginPage_jsp.java:114) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318) 
    at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:164) 
    at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) 
    at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275) 
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562) 
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2403) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2392) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: ognl.OgnlException: userBean [java.lang.NullPointerException] 
    at ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:1456) 
    at ognl.ObjectPropertyAccessor.getPossibleProperty(ObjectPropertyAccessor.java:60) 
    at ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:147) 
    at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.getProperty(ObjectAccessor.java:17) 
    at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2317) 
    at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:138) 
    ... 68 more 
Caused by: java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Properties.java:434) 
    at java.util.Properties.load0(Properties.java:353) 
    at java.util.Properties.load(Properties.java:341) 
    at direstruts.model.UserBean.readProperties(UserBean.java:128) 
    at direstruts.model.UserBean.<init>(UserBean.java:27) 
    at direstruts.action.LoginAction.getUserBean(LoginAction.java:46) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:891) 
    at ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:1454) 
    ... 73 more 

19-Nov-2014 14:21:05.288 WARNING [http-apr-8080-exec-109] com.opensymphony.xwork2.util.logging.jdk.JdkLogger.warn NOTE: Previous warning message was issued due to devMode set to true. 
19-Nov-2014 14:21:05.429 WARNING [http-apr-8080-exec-109] com.opensymphony.xwork2.util.logging.jdk.JdkLogger.warn Caught an exception while evaluating expression 'userBean.password' against value stack 
Caught an Ognl exception while getting property userBean - Class: ognl.OgnlRuntime 
File: OgnlRuntime.java 
Method: getMethodValue 
Line: 1456 - ognl/OgnlRuntime.java:1456:-1 
    at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:143) 
    at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2317) 
    at ognl.ASTProperty.getValueBody(ASTProperty.java:114) 
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) 
    at ognl.SimpleNode.getValue(SimpleNode.java:258) 
    at ognl.ASTChain.getValueBody(ASTChain.java:141) 
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) 
    at ognl.SimpleNode.getValue(SimpleNode.java:258) 
    at ognl.Ognl.getValue(Ognl.java:494) 
    at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:255) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.getValue(OgnlValueStack.java:358) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValue(OgnlValueStack.java:347) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValueWhenExpressionIsNotNull(OgnlValueStack.java:322) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:308) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:366) 
    at com.opensymphony.xwork2.util.TextParseUtil$1.evaluate(TextParseUtil.java:157) 
    at com.opensymphony.xwork2.util.OgnlTextParser.evaluate(OgnlTextParser.java:49) 
    at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:167) 
    at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:112) 
    at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:85) 
    at org.apache.struts2.components.Component.findValue(Component.java:353) 
    at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:813) 
    at org.apache.struts2.components.UIBean.end(UIBean.java:544) 
    at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42) 
    at org.apache.jsp.loginPage_jsp._jspx_meth_s_005fpassword_005f0(loginPage_jsp.java:313) 
    at org.apache.jsp.loginPage_jsp._jspx_meth_s_005fform_005f0(loginPage_jsp.java:191) 
    at org.apache.jsp.loginPage_jsp._jspService(loginPage_jsp.java:114) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318) 
    at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:164) 
    at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) 
    at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275) 
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562) 
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2403) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2392) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: ognl.OgnlException: userBean [java.lang.NullPointerException] 
    at ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:1456) 
    at ognl.ObjectPropertyAccessor.getPossibleProperty(ObjectPropertyAccessor.java:60) 
    at ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:147) 
    at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.getProperty(ObjectAccessor.java:17) 
    at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2317) 
    at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:138) 
    ... 68 more 
Caused by: java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Properties.java:434) 
    at java.util.Properties.load0(Properties.java:353) 
    at java.util.Properties.load(Properties.java:341) 
    at direstruts.model.UserBean.readProperties(UserBean.java:128) 
    at direstruts.model.UserBean.<init>(UserBean.java:27) 
    at direstruts.action.LoginAction.getUserBean(LoginAction.java:46) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:891) 
    at ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:1454) 
    ... 73 more 

19-Nov-2014 14:21:05.507 WARNING [http-apr-8080-exec-109] com.opensymphony.xwork2.util.logging.jdk.JdkLogger.warn NOTE: Previous warning message was issued due to devMode set to true. 

[EDIT] Я забыл упомянуть, что у меня есть действие, в котором распространяются все остальные действия. Вот оно:

package direstruts.action; 

import com.opensymphony.xwork2.ActionSupport; 
import java.util.Map; 
import org.apache.struts2.interceptor.SessionAware; 

public class GenericAction extends ActionSupport implements SessionAware{ 
    protected static final long serialVersionUID = 4L; 
    protected Map<String, Object> session; 

    @Override 
    public void setSession(Map<String, Object> session) { 
     this.session = session; 
    } 
} 

Чтобы сохранить память действия, то GenericAction реализует SessionAware. Это нормально?

ответ

1

Как сообщили в Parameters Interceptor documentation (а также explained in this answer), за исключением:

.error установка выражение 'userBean.password' со значением [ 'XXX']

означает, что вы пропущены сеттер.

Соглашение JavaBeans устанавливает, что у вас должно быть свойство с геттером и сеттер с тем же именем, а Struts2 работает в соответствии с этими принципами, выполняя интроспекцию посредством отражения, чтобы очертить объекты вашего Action.

Что у вас в коде вместо этого?

public UserBean getUserBean() { 
    if(!session.containsKey("userBean")) 
     this.setUserBean(new UserBean()); 
    return (UserBean) session.get("userBean"); 
} 

public void setUserBean(UserBean userBean) { 
    session.put("userBean", userBean); 
} 

Немного нестандартное, мм!

Имущество private UserBean userBean; даже не существует, а геттеры и сеттеры занимаются странными сеансами (в то время как у них не должно быть никакого бизнеса).

Изменить его

private UserBean userBean; 

public UserBean getUserBean() { 
    return userBean; 
} 

public void setUserBean(UserBean userBean) { 
    this.userBean = userBean; 
} 

И это будет работать.

Затем, если необходимо, найдите другой способ работы с сеансом и вашим объектом (например, метод prepare() или даже execute()).

+0

Я отредактировал свой вопрос. – jomicobasi

+0

Это ничего не меняет. Вам нужен частный пользователь UserBean со стандартным getter/setter.Не выполняйте операции с сеансом в геттерах/сеттерах, но в методах действий (или в методе подготовки, осторожно) –

+0

Andrea Ligios Я выяснил свою проблему. Я сделал «Чистое» и «Сборка в Netbeans», и он удалил файл app.properties из каталога dir. Извините за трату вашего времени. В будущем я постараюсь уделять больше внимания деталям. – jomicobasi

 Смежные вопросы

  • Нет связанных вопросов^_^