如果在Struts 2中扩展ValidatorSupport
类,那么可以在类上有实例变量吗?它有状态还是必须是无状态的?扩展Struts2/XWork ValidatorSupport的类是否可以具有状态
我知道动作类不是单身人士,可以有状态,但我不确定他们相关的验证器。
我需要知道,如果我可以有一个实例变量内的验证程序,扩展ValidatorSupport
。例如:
public class SomeValidator extends ValidatorSupport {
private boolean alreadyHasErrorOnPage;
}
如果验证是signlestons,使用alreadyHasErrorOnPage因为这将导致竞争条件,从来没有为每个请求/响应一致的默认状态。如果它们不是单例,并且为每个请求/响应创建一个新的SomeValidator实例,那么使用alreadyHasErrorOnPage将是安全的。
因为我不确定它有多少与我目前正在进行的项目有特定的相关性,所以请加上一点盐。
验证器在我们的项目中是单一的。我进入并调试了应用程序,发现实例成员在第二个请求/响应后不处于默认状态。基本上它们继承了第一个或上一个请求/响应的价值。
我仍然不确定的原因是因为我们的项目似乎包装了ValidatorSuppport,并暴露了验证器实现的接口。在我们的代码库中,似乎有一些代码将验证器的实例存储在地图中,实际上使它们成为单例。我一直无法确定股票struts2的行为方式是否相同。
什么样的状态?例如,验证器已经声明存储配置,如字符串的最大/最小长度。 –
关于当前会话的状态我想。我不太清楚如何解释它。验证器的工作方式是将动作的一个实例传递给validate方法。然后我们使用getter和setter来获取我们想要验证的数据。所以我想我的问题可能是它应该在当前的请求/响应中存储信息?本质上是那些类Singleton的或者是他们为每个请求/响应创建的实例 –
您将实例传递给验证器时?我的意思是,验证器在他们的“验证”方法中获得对象;它们不存储在验证器本身中。我不清楚你想要做什么,但我很怀疑。无论如何,测试会很容易,对吧?我不记得我的头顶,但如果它们是按请求创建的,我会感到惊讶。 –