下面是一个struts2的action,目的是得到输入的username值,然后做相应的判断,但总是得到username为null,从而总是转向“login”视图,我错在哪里?
package login;
import com.opensymphony.xwork2.ActionContext;public class getBooksAction{
public  String[] books;
public String[] getBooks() {
return books;
}
public void setBooks(String[] books) {
this.books = books;
}
    public String execute()throws Exception{
     String username = (String)ActionContext.getContext().getSession().get("username");
         System.out.println("username="+username);
     if(username!=null && username.equals("scott")){
     BookService bs = new BookService();
     setBooks(bs.getLeeBooks());
     return "success";
     }
     else return "login";
    }}下面是struts.xml的配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
    <package name="books" extends="struts-default">
        <action name="getBook" class="login.getBooksAction">
             <result name="login">/login.jsp</result>
             <result name="success">/books/showbooks.jsp</result>
        </action>
    
    </package></struts>

解决方案 »

  1.   

    action 中没有定义uersname属性,和页面没有对应起来
      

  2.   

    username 你没有设置get,set方法,怎么可能得到从页面传过来的值?
      

  3.   

    String username = (String)ActionContext.getContext().getSession().get("username");
    你这样得到的话,必须在页面上把username 放到Context里面去
      

  4.   

    哥你写的什么东西啊。。页面的值你怎么从session那里拿了?
    你又没有在页面说是放那里去。
    和楼上说的。action定义username。get set方法,
      

  5.   

    根据你的写法。
    username from session,你session里是否有username??
      

  6.   

    我在LoginAction.java中定义了username,并且设置了set和get方法。是想用getBooksAction.java接受此处的username。
    package login;
    import com.opensymphony.xwork2.ActionContext;
    public class LoginAction {
        public  String username;
    public  String password;
    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 String execute() throws Exception{
       if(getUsername().equals("scott") && getPassword().equals("tiger"))
           {  ActionContext.getContext().getSession().put("user",getUsername()); return "success"; }
       else 
           { return "error"; }

    }
    }
      

  7.   

    奇怪了,用http://localhost:8080/struts01/getBook  访问时,getBooksAction能返回"success"视图,用http://localhost:8080/struts01/getBook.action  访问时,无论如何只能返回"login"视图,这是怎么回事。
      

  8.   

    说明你用http://localhost:8080/struts01/getBook.action 访问的时候没有取到正确的值啊。估计都是Null。你打印下看看不就知道了 alert();
      

  9.   

    LoginAction implements ServletRequestAware{private HttpServletRequest request;public setServletRequest(HttpServletRequest arg1) {
      this.request = arg1;
    }
    public String execute()throws Exception{   String userName = request.getParameter("userName");}
    }
      

  10.   


    ActionContext.getContext().getSession().put("user",getUsername());//这是你存在session里的值
    String username = (String)ActionContext.getContext().getSession().get("username");//这是你取的时候
    LZ你存在session里的标识和取的时候用的不一样啊。
    存的时候用的是user,取的时候用的是username,那能取到才怪。
    String username = (String)ActionContext.getContext().getSession().get("username");
    改成
    String username = (String)ActionContext.getContext().getSession().get("user");//
     
      

  11.   

    首先,session中的值只有先放进去才能从中取值;
    其次,struts2获取表单参数的方法:在action中定义和页面input属性同名的变量,为其添加getXX setXX方法,该变量在action中直接用;
      

  12.   


    你不许管那么多 你只要告诉我 到你的execute 方法里 username里是不是空的 是那就应该是login. 你直接调用.action进来 你传参数了吗?