2011-12-12 49 views
0

我是用于开发我的应用程序的struts2。动作类的 示例代码将在不同请求之间维护动作变量的值

class sampleAction extends Action { 
private List<Employee> employee; 
public validate(){ 
--logic for validation 
} 
public String prepopulate(){ 
--logic for populating value of employee list 
} 
--getters and setters 
} 

现在我的问题是在页面加载我叫预填充功能,并填充员工列表的价值。页面提交验证方法被调用后,如果发生错误控制重定向到jsp。但这次员工名单的值是空的。我在struts2中使用这个列表作为autocompleter标签。

回答

4

我从来没有使用过Struts 2内置的验证机制,因为我更喜欢客户端验证以避免额外的往返行程。这纯粹是个人选择而不是标准。

首先,我会建议你不要使用Action并使用ActionSupportActionSupport提供了许多开箱即用的功能,你不需要自己做所有事情。

我假设你正在使用defaultStack,如果是这种情况,它提供了开箱即用的Prepare Interceptor,它会在调用操作本身之前处理任何值。

在你的情况下,在execute方法之前调用validate,所以你永远不会有机会重新填充你在JSP中需要的值。

您需要确保在动作课程中有prepare()方法。下面是这个拦截更多的细节:

Prepare Interceptor
FAQ: How do we repopulate controls when validation fails

+1

* *只依靠客户端验证是一个非常糟糕的主意 - 数据*必须*可以在服务器端是否没有客户机验证方验证发生。 –

+0

@DaveNewton同意!!!但是这应该是我们验证过数据后的第一次检查,因为大部分验证框架对我们都是一样的。虽然我们仍然检查服务器端某些条件的数据:0 –

+0

感谢您的回答。在我的页面中,我想在jsp页面加载时填充一些下拉列表。我通过一个存在于相同动作类中的动作方法加载jsp。准备方法也会叫这个案例吗?还是只在表单提交后调用? –

相关问题