Problème submit Struts/hibernate
Bonjour,
Je suis train de me familiariser avec Struts 2 et hibernate et je me retrouve face a un probleme lors de l ajout d un message dans ma base de donnee (methode post de ma jsp "addMessage.jsp") (null pointeur exception) :(
Pour voux expliquer plus precisement voici mon code.
Class User (Modele)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| package com.vaannila.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotEmpty;
@Entity
@Table(name="USER")
public class User {
private Long id;
private String name;
private String password;
private String gender;
private String country;
private String aboutYou;
private Boolean mailingList;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="USER_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@NotEmpty
@Length(max=50)
@Column(name="USER_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Length(min=6, max=10)
@Column(name="USER_PASSWORD")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@NotEmpty(message="Please select a gender")
@Column(name="USER_GENDER")
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@NotEmpty(message="Please select a country")
@Column(name="USER_COUNTRY")
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@NotEmpty
@Length(max=100)
@Column(name="USER_ABOUT_YOU")
public String getAboutYou() {
return aboutYou;
}
public void setAboutYou(String aboutYou) {
this.aboutYou = aboutYou;
}
@Column(name="USER_MAILING_LIST")
public Boolean getMailingList() {
return mailingList;
}
public void setMailingList(Boolean mailingList) {
this.mailingList = mailingList;
}
@Override
public String toString() {
return "User [aboutYou=" + aboutYou + ", country=" + country
+ ", gender=" + gender + ", id=" + id + ", mailingList="
+ mailingList + ", name=" + name + ", password=" + password
+ "]";
}
} |
Classe Message (modele)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| package com.vaannila.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name="MESSAGE")
public class Message {
@Id
@GeneratedValue
@Column(name="MESSAGE_ID")
private Long id;
@OneToOne
@JoinColumn(name="USER_ID")
private User user;
@Column(name="MESSAGE")
private String message;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUserId(User user) {
this.user = user;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return "Message [id=" + id + ", User="
+ user.toString() + ", message=" + message + "]";
}
} |
Il y a donc une cle etrangere dans la table Message vers la table User (User_ID)
Classe UserDAOImpl
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
package com.vaannila.dao;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.googlecode.s2hibernate.struts2.plugin.annotations.SessionTarget;
import com.googlecode.s2hibernate.struts2.plugin.annotations.TransactionTarget;
import com.googlecode.s2hibernate.struts2.plugin.util.HibernateSessionFactory;
import com.vaannila.model.User;
public class UserDAOImpl implements UserDAO {
@SessionTarget
static
Session session;
@TransactionTarget
Transaction transaction;
// Used to save or update a user.
@Override
public void saveOrUpdateUser(User user) {
try {
session.saveOrUpdate(user);
} catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}
}
/**
* Used to delete a user.
*/
@Override
public void deleteUser(Long userId) {
try {
User user = (User) session.get(User.class, userId);
session.delete(user);
} catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
@Override
public List<User> listUser() {
List<User> courses = null;
try {
courses = session.createQuery("from User").list();
/*System.out.println(courses);
System.out.println("coucou");
for (Iterator iter = (Iterator) courses.iterator(); iter.hasNext();) {
System.out.println("test");
User element = (User) iter.next();
System.out.println("nom : " + element.toString());
}*/
} catch (Exception e) {
e.printStackTrace();
}
return courses;
}
public static List<User> getUserList() throws Exception
{
Session session = HibernateSessionFactory.getSession();
List<User> list = null;
try{
Query query=session.createQuery("from User u");
list =query.list();
}catch(Exception ex){
ex.printStackTrace();
}
return list;
}
} |
J ai ajouter une methode static pour avoir la liste des users car dans ma jsp j affiche une liste deroulante des users...
J utilise Session session = HibernateSessionFactory.getSession();
ai je vraiment le droit? est ce approprie? Je vois avoue que je ne suis pas un expert en session...:(
Classe MessageDAOImpl
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
package com.vaannila.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.googlecode.s2hibernate.struts2.plugin.annotations.SessionTarget;
import com.googlecode.s2hibernate.struts2.plugin.annotations.TransactionTarget;
import com.vaannila.model.Message;
public class MessageDAOImpl implements MessageDAO {
@SessionTarget
Session session;
@TransactionTarget
Transaction transaction;
// Used to save or update a user.
@Override
public void saveOrUpdateMessage(Message m) {
try {
session.saveOrUpdate(m);
} catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}
}
/**
* Used to delete a user.
*/
@Override
public void deleteMessage(Long messageId) {
try {
Message m = (Message) session.get(Message.class, messageId);
session.delete(m);
} catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
@Override
public List<Message> listMessage() {
List<Message> courses = null;
try {
courses = session.createQuery("from Message").list();
System.out.println(courses);
/*System.out.println("coucou");
for (Iterator iter = (Iterator) courses.iterator(); iter.hasNext();) {
System.out.println("test");
User element = (User) iter.next();
System.out.println("nom : " + element.toString());
}*/
} catch (Exception e) {
e.printStackTrace();
}
return courses;
}
@Override
public Message listMessageById(Long messageId) {
Message m = null;
try {
m = (Message) session.get(Message.class, messageId);
} catch (Exception e) {
e.printStackTrace();
}
return m;
}
} |
ClasseUserAction
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
package com.vaannila.web;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.hibernate.validator.Valid;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.vaannila.dao.UserDAO;
import com.vaannila.dao.UserDAOImpl;
import com.vaannila.model.User;
public class UserAction extends ActionSupport implements ModelDriven<User> {
private static final long serialVersionUID = -6659925652584240539L;
@Valid
private User user = new User();
private List<User> userList = new ArrayList<User>();
private UserDAO userDAO = new UserDAOImpl();
@Override
public User getModel() {
return user;
}
public String saveOrUpdate()
{
System.out.println("coucou");
System.out.println(user);
userDAO.saveOrUpdateUser(user);
System.out.println("coucou");
return SUCCESS;
}
public String list()
{
userList = userDAO.listUser();
return SUCCESS;
}
/**
* To delete a user.
* @return String
*/
public String delete()
{
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
userDAO.deleteUser(Long.parseLong( request.getParameter("id")));
return SUCCESS;
}
/**
* To list a single user by Id.
* @return String
*/
public String edit()
{
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
user = userDAO.listUserById(Long.parseLong( request.getParameter("id")));
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
} |
Classe MessageAction
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
package com.vaannila.web;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.hibernate.validator.Valid;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.vaannila.dao.MessageDAO;
import com.vaannila.dao.MessageDAOImpl;
import com.vaannila.model.Message;
public class MessageAction extends ActionSupport implements ModelDriven<Message> {
private static final long serialVersionUID = -6659925652584240539L;
@Valid
private Message message = new Message();
private List<Message> messageList = new ArrayList<Message>();
private MessageDAO messageDAO = new MessageDAOImpl();
@Override
public Message getModel() {
return message;
}
public String saveOrUpdate()
{
System.out.println("coucou");
System.out.println(messageDAO);
System.out.println("coucou");
System.out.println(message);
messageDAO.saveOrUpdateMessage(message);
return SUCCESS;
}
public String list()
{
messageList = messageDAO.listMessage();
return SUCCESS;
}
/**
* To delete a Message.
* @return String
*/
public String delete()
{
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
messageDAO.deleteMessage(Long.parseLong( request.getParameter("id")));
return SUCCESS;
}
/**
* To list a single Message by Id.
* @return String
*/
public String edit()
{
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
message = messageDAO.listMessageById(Long.parseLong( request.getParameter("id")));
return SUCCESS;
}
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
public List<Message> getMessageList() {
return messageList;
}
public void setMessageList(List<Message> messageList) {
this.messageList = messageList;
}
} |
hibernate.cfg.xml (configuration de ma bd)
struts.xml
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| <!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="true" />
<package name="default" extends="hibernate-default">
<action name="addUser" class="com.vaannila.web.UserAction">
<result>/addUser.jsp</result>
</action>
<action name="saveOrUpdateUser" method="saveOrUpdate" class="com.vaannila.web.UserAction">
<result name="input">/addUser.jsp</result>
<result name="success" type="redirect">listUser</result>
</action>
<action name="listUser" method="list" class="com.vaannila.web.UserAction">
<interceptor-ref name="basicStackHibernate" />
<result name="success">/listUser.jsp</result>
</action>
<action name="editUser" method="edit" class="com.vaannila.web.UserAction">
<result name="input">/addUser.jsp</result>
<result name="success">/addUser.jsp</result>
</action>
<action name="deleteUser" method="delete" class="com.vaannila.web.UserAction">
<result name="input">/listUser.jsp</result>
<result name="success" type="redirect">listUser</result>
</action>
<action name="addMessage" class="com.vaannila.web.MessageAction">
<result>/addMessage.jsp</result>
</action>
<action name="saveOrUpdateMessage" method="saveOrUpdate" class="com.vaannila.web.MessageAction">
<result name="input">/addMessage.jsp</result>
<result name="success" type="redirect">listMessage</result>
</action>
<action name="listMessage" method="list" class="com.vaannila.web.MessageAction">
<interceptor-ref name="basicStackHibernate" />
<result name="success">/listMessage.jsp</result>
</action>
<action name="editMessage" method="edit" class="com.vaannila.web.MessageAction">
<result name="input">/addMessage.jsp</result>
<result name="success">/addMessage.jsp</result>
</action>
<action name="deleteMessage" method="delete" class="com.vaannila.web.MessageAction">
<result name="input">/listMessage.jsp</result>
<result name="success" type="redirect">listMessage</result>
</action>
</package>
</struts> |
addMessage.jsp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
<%@ page import="com.vaannila.model.User"%>
<%@ page import="com.vaannila.dao.UserDAOImpl"%>
<%@ page import="java.util.*"%>
<%@ 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>Message Add</title>
<s:head />
<style type="text/css">import url(style.css);</style>
</head>
<body>
<s:actionerror/>
<s:form action="saveOrUpdateMessage" method="post">
<s:hidden name="message.id" />
<label> User</label>
<select>
<% Iterator<User> it = UserDAOImpl.getUserList().iterator();
String s=null;
while(it.hasNext()){
User user =(User)it.next();
s=user.getName();
%>
<option value="<%=user%>"> <%=user.getGender()+" "+user.getName()%></option>
<%}%>
</select>
<s:textfield name="message.message" label="Message" />
<s:submit />
</s:form>
</body>
</html> |
L ajout de message relatif a un user ne marche pas...
Je vois bien les users dans ma liste deroulante, lorsque je fait mon submit, j ai un null pointer exception dans "MessageAction" methode "saveOrUpdate" pour l attribut "message"...
Voila mon probleme :(
listMessage.jsp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <%@ 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>List Message</title>
<s:head />
<style type="text/css">import url(style.css);</style>
</head>
<body>
<s:if test="messageList.size() > 0">
<div class="content">
<table class="messageTable" cellpadding="5px">
<tr class="even">
<th>Id User</th>
<th>Message</th>
<th>Edit</th>
<th>Delete</th>
</tr>
<s:iterator value="messageList" status="messageStatus">
<tr
class="<s:if test="#messageStatus.odd == true ">odd</s:if> <s:else>even</s:else>">
<td><s:property value="user" /></td>
<td><s:property value="message" /></td>
<td>
<s:url id="editURL" action="editMessage">
<s:param name="id" value="%{id}"></s:param>
</s:url>
<s:a href="%{editURL}">Edit</s:a>
</td>
<td>
<s:url id="deleteURL" action="deleteMessage">
<s:param name="id" value="%{id}"></s:param>
</s:url>
<s:a href="%{deleteURL}">Delete</s:a>
</td>
</tr>
</s:iterator>
</table>
</div>
</s:if>
<a href="addMessage.action">Add Message</a><br>
<a href="/test/">Menu</a>
</body>
</html> |
Merci d avance... ca doit pas etre une grosse erreur je pense...