2012-11-24 32 views
2

我使用Java中的Ajax在Hibernate和Struts 2中制作了网站。基本上,当我创建时,修改任何本地内容(在.java中),如在int的指定值,在下次检查null。每次都发生这种情况。Web Java变量重置

这是struts.xml我的大部分页面都吩咐这样:

<action name="showclient" class="modelClass.LogInObject" method="show"> 
    <result name="success" >/MyAccount.jsp</result> 
</action> 

客户端仅仅是一个箱类CRUD实现:

public class Client extends ActionSupport { 

private static final long serialVersionUID = 1L; 
private Long idClient; 
private String login; 
private String password; 
private String nom; 
private String prenom; 
private String adresse; 
private String ville; 
private int cPostal; 
private String email; 
private Set<Commande> panier = new HashSet<Commande>(0); 
// private static final Logger logger = Logger.getLogger(Client.class.getName()); 

public static Client logIn(String login, String password) 
{ 
    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 
    String qstr = "SELECT * FROM client"; 
    Query query = session.createSQLQuery(qstr).addEntity(Client.class); 
    List<Client> list = (List<Client>)query.list(); 
    Iterator<Client> it = list.iterator(); 
    while (it.hasNext()) 
    { 
     Client client = it.next(); 
     if (client.getLogin().compareTo(login) == 0 && 
      client.getPassword().compareTo(password) == 0) 
      return client; 
    } 
    return null; 
} 

LogInObject

public class LogInObject extends ActionSupport { 
private static final long serialVersionUID = 1L; 
private Long loggedInId; 
private String login; 
private String password; 
private String confirmPassword; 
private String error; 
public Client client; 

public String login() 
{ 
    Client client = null; 
    if ((client = Client.read(Client.logIn(this.login, this.password).getIdClient())) != null) 
    { 
     this.client = client; 
     return SUCCESS; 
    } 
    this.login = ""; 
    this.password = ""; 
    this.error = "Bad login or password"; 
    return ERROR; 
} 

public String show() 
{ 
    System.out.println(this.getClient().getIdClient()); 
    return SUCCESS; 
} 

最后主类:

public class MainActionObject extends ActionSupport { 
private static final long serialVersionUID = 1L; 
private boolean logged; 
private String search; 

List<Produit> listProduit; 

LogInObject  loginObject; 

public String login() 
{ 
    if (this.loginObject.login() == SUCCESS) 
    { 
     this.setLogged(true); 
     return SUCCESS; 
    } 
    return ERROR; 
} 
} 

所以客户端的show()loginobject打印的ID从SQL基地在初始化的时刻读我这有打印到.jsp页的所有信息r和毕竟它不再存在。即使我以任何可能的方式对id做了备份。我知道CRUD的含义,所以不要告诉我它的正常。

+0

你的意思是什么检查? –

+0

例如,当我初始化和客户端的ID,当他登录时,他点击编辑按钮,并且我想通过ID从sql读取客户端。我以前的ID现在是空的。 –

+0

你在哪里存储该ID? –

回答

0

好了,你的动作需要extends ActionSupport implements ServletRequestAware

,当你的客户端登录成功

public String login() 
{ 
    ... 
    getServletRequest().getSession().setAttribute("idClient", client.getIdClient()); 

public String show() 
{ 
    System.out.println(getServletRequest().getSession().getAttribute("idClient")); 
+0

听起来不错,去检查它是否有效。 –

+0

它的作品,我可以在会议中存货。 无论如何,put()被depricated使用setAttribute并获得Attribute而不是 –

+0

那些家伙总是改变他们的apis,不知道下一个十年会如何命名。 –