【问题标题】:My function Java didn't work with DB (MySQL) using Struts 2我的函数 Java 不适用于使用 Struts 2 的 DB (MySQL)
【发布时间】:2017-06-03 03:31:55
【问题描述】:

我的代码有一些问题,它不起作用我认为我的班级有这个问题UserService,但我不确定。当我运行我的程序时,我的控制台显示:

堆栈跟踪:

java.lang.NullPointerException
    com.web.actions.UtlisateurAction.listUsers(UtlisateurAction.java:67)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
    org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:100)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)
    
You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set:

  struts.devMode=false
in your WEB-INF/classes/struts.properties file.

UtlisateurAction.java:

package com.web.actions;

import java.util.List;

import com.app.business.bo.security.Role;
import com.app.business.bo.security.Utlisateur;
import com.app.business.services.UtlisateurService;
import com.app.exceptions.DuplicateLoginException;
import com.web.BaseAction;

public class UtlisateurAction extends BaseAction {



    private UtlisateurService userService;

    private List<Utlisateur> listUsers;

    private Utlisateur utilisateur;

    private List<Role> listRoles;

    private Long selectedRole;


    public String passage(){
        System.out.println("Passage");
    return SUCCESS;
    }
    public String showMenu(){
        System.out.println("User Access");
        return SUCCESS;
    }

    public String initFormAddUser() {
        listRoles = userService.getAllRoles();

        return SUCCESS;
    }

    public String addUser() {

        try {
            utilisateur.setRole(userService.getRoleById(selectedRole));
            userService.addUtilisateur(utilisateur);

        } catch (DuplicateLoginException ex) {
            addActionError("Operation non effectuee a  cause d'une erreur");

            ex.printStackTrace();
            return "error";

        } catch (Exception ex) {
            addActionError("Operation non effectuee à cause d'une erreur");

            ex.printStackTrace();
            return "error";

        }
        // on affiche une page d'erreur
        addActionMessage("Utilisateur ajoutée avec succées");
        return SUCCESS;
    }

    public String listUsers() {
        System.out.println("On train de detecter");
        listUsers = userService.getAllUsers();
        System.out.println("GET ALL USERS");
        return SUCCESS;
    }

    public List<Utlisateur> getListUsers() {
        return listUsers;
    }

    public void setListUsers(List<Utlisateur> listUsers) {
        this.listUsers = listUsers;
    }

    public UtlisateurService getUserService() {
        return userService;
    }

    public void setUserService(UtlisateurService userService) {
        this.userService = userService;
    }

    public Utlisateur getUtilisateur() {
        return utilisateur;
    }

    public void setUtilisateur(Utlisateur utilisateur) {
        this.utilisateur = utilisateur;
    }

    public List<Role> getListRoles() {
        return listRoles;
    }

    public void setListRoles(List<Role> listRoles) {
        this.listRoles = listRoles;
    }

    public Long getSelectedRole() {
        return selectedRole;
    }

    public void setSelectedRole(Long selectedRole) {
        this.selectedRole = selectedRole;
    }

}

UtlisateurServiceImpl.java:

package com.services.impl;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.security.authentication.encoding.ShaPasswordEncoder;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

import com.bo.security.Role;
import com.bo.security.Utilisateur;
import com.boudaa.dao.exceptions.EntityNotFoundException;
import com.dao.RoleDao;
import com.dao.UtilisateurDao;
import com.exceptions.DuplicateLoginException;
import com.services.UtilisateurService;

public class UtilisateurServiceImpl implements UtilisateurService, UserDetailsService {

    private UtilisateurDao userDao;
    private RoleDao roleDao;

    protected final Log log = LogFactory.getLog(getClass());

    public UserDetails loadUserByUsername(String pLogin) throws UsernameNotFoundException {
        Utilisateur lUser = null;
        Collection<GrantedAuthority> arrayAuths = new ArrayList<GrantedAuthority>();

        // On récupère un objet de domaine de type User ayant comme login pLogin
        try {
            lUser = userDao.getUserByLogin(pLogin);

        } catch (ObjectRetrievalFailureException ex) {
            ex.printStackTrace();

            // nous relançons une UsernameNotFoundException si aucun utilisateur
            // ne correspond à cet login
            log.debug("Erreur d'authentification avec le login : " + pLogin);
            throw new UsernameNotFoundException("User " + pLogin + " not exists", ex);

        }


        // Si un utilisateur correspond à cet identifiant, nous en profitons
        // pour mettre à jour sa date de dernière connexion
        lUser.setLastAccessDate(Calendar.getInstance().getTime());
        userDao.update(lUser);
        // Il faut ensuite récupérer les rôles de l’utilisateur et les
        // mettre
        // sous la forme de SimpleGrantedAuthority, une interface propre à 
        // Spring
        // Security*

        Role role = lUser.getRole();
        arrayAuths.add(new SimpleGrantedAuthority(role.getRoleName()));
        // /un User (classe Spring Security) est créé
        System.out.println("oui");
        return new User(pLogin, lUser.getPassword(), lUser.isEnabled(), lUser.isAccountNotExpired(), true,
                lUser.isAccountNotLocked(), arrayAuths);
    }


    public Utilisateur getUserByLogin(String pLogin) throws EntityNotFoundException {

        List<Utilisateur> users;
        try {
            users = userDao.getEntityByColumn("Utilisateur", "login", pLogin);

        } catch (ObjectRetrievalFailureException ex) {

            throw new EntityNotFoundException("Aucun utilisateur avec le login : " + pLogin);
        }

        if (users.size() != 1) {
            // TODO : Ecrire le code pour ajouter des log fatal
            // TODO : ecrire le code envoyant un mail d'erreur fatal à 
            // l'administrateur

            throw new RuntimeException("Erreur inconnue dans le systeme");
        }

        return users.get(0);
    }
    public void addUtilisateur(Utilisateur user) throws DuplicateLoginException {

        // pour hacher avec SHA1
        ShaPasswordEncoder encoder = new ShaPasswordEncoder();


        // Hachage du mot de passe avec un gain de sel variable = login
        String cryptedPassword = encoder.encodePassword(user.getPassword(),
                user.getLogin());

        // affecter le mot de passe haché
        user.setPassword(cryptedPassword);

        // stockage de l'utilisateur dans la base de données
        try {
            userDao.create(user);

        } catch (DataIntegrityViolationException ex) {
            log.error("erreur d'ajout d'un utilisateur à cause de l'exception " + ex
                    + " . un utilisateur avec le login " + user.getLogin() + " existe déjà dans la base de données");
            throw new DuplicateLoginException("Erreur d'inscription, login existe déjà ", ex);
        }

    }

    public Role getRoleByName(String roleName) {
        return roleDao.getRoleByName(roleName);
    }

    public Role getRoleById(Long pRoleId) throws EntityNotFoundException {
        return roleDao.findById(pRoleId);
    }

    public List<Utilisateur> getAllUsers() {
        return userDao.getAll();
    }

    public List<Role> getAllRoles() {
        return roleDao.getAll();
    }

    public void deleteUser(Utilisateur u) throws EntityNotFoundException {

        userDao.delete(u.getIdUtilisateur());

    }

    public UtilisateurDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UtilisateurDao userDao) {
        this.userDao = userDao;
    }

    public RoleDao getRoleDao() {
        return roleDao;
    }

    public void setRoleDao(RoleDao roleDao) {
        this.roleDao = roleDao;
    }


}

【问题讨论】:

  • 您是否曾经将userService 设置为任何内容?在我看来,当您尝试在 listUsers 中使用它时,它可能仍然是 null
  • UtlisateurAction类中,你能不能用下面的sn-p替换listUsers()方法试试? public String listUsers() { System.out.println("On train de detecter"); listUsers = new UtlisateurService().getAllUsers(); System.out.println("GET ALL USERS"); return SUCCESS; }
  • 谢谢,但我正在使用 spring,他管理实例
  • 我还是不相信你的userService已经被注入了。可能是因为您没有正确的 Spring 注释。你可以使用你的调试器来检查这个。
  • 发布你的applicationContext.xml

标签: java mysql spring hibernate struts2


【解决方案1】:

看起来如果 bean id 在applicationContext.xml 中可用,那么它将被注入到动作 bean。否则 null 在 bean 未初始化时需要值。

对于与 spring 的集成,您需要 struts-spring-plugin

Spring 是一个轻量级容器,提供集中的、自动化的 应用程序对象的配置和连接,使用 称为“依赖注入”的技术

Spring 插件通过覆盖 Struts ObjectFactory 来工作 增强核心框架对象的创建。当一个对象要 被创建时,它使用 Struts 配置中的类属性来 对应于Spring配置中的id属性。如果不 发现,该类将尝试像往常一样创建,然后由 春天。在 Actions 的情况下,Spring 2 的 bean scope 特性可以 用于将 Action 实例限定为会话、应用程序或 自定义范围,提供高于默认值的高级自定义 每个请求的范围。

弹簧动作是可选的!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2014-03-03
    • 1970-01-01
    相关资源
    最近更新 更多