我正在尝试一些 bean 验证,但我偶然发现了“奇怪”的行为。我正在使用 Glassfish 和 Primefaces 作为前端(如果有什么不同的话)。在我的项目的其他地方,我使用 Hibernate-validator,我不确定它是否正在验证 JSF(否则它是 Glassfish 中的默认设置)。我有一个托管 bean:
@javax.faces.bean.ManagedBean
@javax.faces.bean.ViewScoped
public class TestBean
{
@Size(min=8)
private String _testString;
public String getTestString()
{
return _testString;
}
public String setTestString(String testString)
{
_testString = testString;
}
public void doSomethind()
{
// Do something with the test string
}
}
以及一个包含以下内容的 JSF 页面:
<h:form id="testForm">
<h:outputLabel for="testInput" value="Input:"/>
<p:inputText id="testInput" value="#{testBean.testString}"/>
<p:message id="testInputMsg" for="testInput"/>
<p:commandButton value="Aanmaken" action="#{testBean.doSomething}" update="@form"/>
</h:form>
_testString
不会以这种方式得到验证。但是,当我将字段更改为:
@Size(min=8)
private String testString;
或者当我注释 getter 而不是字段时:
private String _testString;
@Size(min=8)
public String getTestString()
{
return _testString;
}
按照我们的编码指南,我们必须在私有字段前加上下划线。这让我只有一个选择;注释吸气剂。
有人可以解释为什么它会这样吗?