2013-04-30 109 views
0

在我的Java Application Im中尝试创建用户组并为用户分配权限,具体取决于它们所属的用户组。这是我编程的。当用户登录到系统时,获取用户名并存储在一个静态变量中。当用户打开任何表单时,从静态变量中获取用户名并检查其组和权限。根据权限禁用并启用表单的某些组件。这里我有问题从静态变量stgroupName中检索值。 ItmMgt类的方法checkuserrights()不会获取当前用户的名称。有人能帮助我理解这里的错误吗?我想,应该有很多更好的方法来做到这一点。所以欢迎任何建议。将静态变量值传递给另一个类

public class Login extends javax.swing.JInternalFrame { 

     public static String USERNAME; 
     USERNAME = txtUserName.getText(); // get the user name to static variable 
    } 

    public class ItemMgt extends javax.swing.JInternalFrame { 

     public ItemMgt() { 

       initComponents(); 
       checkuserrights(); 
       genarateID(); 
     } 

    private void checkuserrights() { 
     try { 

       Usergroup usergroup = UserGroupController.getUserRights(Login.USERNAME);// check the user's rights passing user name from static variable. 
       if (usergroup != null) { 
        btnDelete.setEnabled(usergroup.isDeleteItem()); 
        btnAdd.setEnabled(usergroup.isAdditem()); 
        btnUpdate.setEnabled(usergroup.isUpdateitem()); 

       } 
     } catch (ClassNotFoundException ex) { 
       Logger.getLogger(ItemMgt.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (SQLException ex) { 
       Logger.getLogger(ItemMgt.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

    public class UserGroupController { 

     public static Usergroup getUserRights(String username) throws ClassNotFoundException, SQLException { 
       Connection conn = DBConnection.conn(); 
       String sql = "select * from UserGroup where uGroupName = ?"; 

       Object[] values = {username}; 
       ResultSet res = DBHandller.getData(sql, conn, values); 
       while (res.next()) { 
        String grpName = res.getString("uGroupName"); 
        boolean additem = res.getBoolean("addItem"); 
        boolean delitem = res.getBoolean("delteItem"); 
        boolean upitem = res.getBoolean("editItem"); 
        Usergroup ugroup = new Usergroup(grpName, additem, delitem, upitem); 
        return ugroup; 
       } 
       return null; 
     } 
    } 
+1

你的代码不清楚,不能编译。它表明你将* user *名称存储在* Login *类的名为* stgroupName *的静态变量中,然后尝试从名为* stgroupName *的静态变量中取回组名,但位于* UserGroup *类。修正你的命名约定(这个'st'前缀是不必要的,并且让事情变得更不可读),并将事物存储在一个独特的地方。 – 2013-04-30 13:07:52

+0

它是一个maltyvuser应用程序? – MaVRoSCy 2013-04-30 13:10:37

+0

@JB Nizet对不起。它应该是Usergroup usergroup = UserGroupController.getUserRights(Login.stgroupName);更新了代码 – amal 2013-04-30 13:12:31

回答

3

根据定义,静态变量是gloabl对象。在一个实例中更改该值时,该对象的所有其他实例的值将具有相同的值。这是使用静态的一点。

听起来你的对象设计是错误的,你应该使用一个包含组名的用户信息的对象。你可以在你的代码中传递这个对象。

相关问题