2010-07-31 117 views
0

我已经作出了从像:缺省初始化形成

MyForm extend ActionForm{ 

    list<Menu> MenuList=null; 

    MyForm(){ 

    super(); 

    setMenuList(); //initialize menu list 

    } 

} 

菜单对象有字串应将描述和布尔变量对选定的或没有。

在网页中,我正在迭代列表以显示所有菜单和复选框以覆盖这些布尔变量。但是,每次我想要访问选定的项目时,列表都会设置为默认值。那是因为构造函数,我已经定义了吗? 请帮我个伙?有没有其他的方式来初始化变量,我也尝试初始化它的getter函数列表,但它给了我一个空指针异常。我甚至无法理解为什么会这样。

回答

1

查看Prepare interceptor。它允许当调用一个动作,发生之前的任何其他动作逻辑您自动调用prepare方法:

public class MyForm extend ActionForm implement Preparable { 

    list<Menu> MenuList=null; 

    prepareView(){ 
     // initialize your menu list 
     List yourMenu = new ArrayList(); 
     yourMenu.add("foo"); 
     yourMenu.add("bar"); 
     setMenuList(yourMenu); 
    } 

    view(){ 
     return INPUT; 
    } 
} 

在上述示例中,当调用MyForm的的视图()方法,prepareView()将被首先调用,设置菜单并准备好在您的INPUT上使用。

您可能还想考虑在会话期间将yourMenu添加到会话中,以便在您遇到验证错误时它仍然可用。

+0

感谢帕特,它真的是一个非常有用的信息。 – 2010-08-02 17:18:15