小编典典

条件Bean验证

java

我在我的JSF项目中使用Bean验证。现在,我遇到了一种情况,在这种情况下,仅当验证先前的方法时,我才想验证方法。

我举一个例子:

@AssertTrue(message="{invalidCode}")
private boolean isValidActivationCode() { ... }

if(isValidActivationCode()) {
    @AssertTrue(message="{alreadyActivated}")
    private boolean isAlreadyActivated() { ... }
}

由于我将收到每个参数的激活码,因此我想先对其进行验证。如果无效,将导致违规。如果是这样,我什至无法检查它是否已被激活(因为代码无效)。因此,是否有可能实现如上所述的任何功能(if语句的功能,我确实知道这是行不通的,但是它表明了我要完成的工作)。

提前致谢

更新资料

像Ravi K这样的解决方法提到:

@AssertTrue(message="{invalidCode}")
private boolean isValidActivationCode() { ... }

@AssertTrue(message="{alreadyActivated}")
private boolean isAlreadyActivated() { return isValidActivationCode() ? ... : true; }

虽然我想知道,有没有一种干净的方法来解决这个问题?如果没有人很快提供答案,我将假定没有解决方案,并且我将接受Ravi K的解决方法作为此问题的答案。


阅读 218

收藏
2020-11-30

共1个答案

小编典典

好吧,我无法深入JSF注释方面,但是我很好奇为什么您不能简单地在isAlreadyActivated()中调用isValidActivationCode(),例如下面的内容,

@AssertTrue(message="{invalidCode}")
private boolean isValidActivationCode() { ... }


@AssertTrue(message="{alreadyActivated}")
private boolean isAlreadyActivated() {

     if(isValidActivationCode()) {
           <Logic for isAlreadyActivated>
      )

}
2020-11-30