私はいくつかのBeanValidationを試していますが、「奇妙な」動作に遭遇しています。私はフロントエンドとして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
方法で検証されません。ただし、フィールドを次のように変更すると、BeanValidationは機能します。
@Size(min=8)
private String testString;
または、フィールドの代わりにゲッターに注釈を付ける場合:
private String _testString;
@Size(min=8)
public String getTestString()
{
return _testString;
}
コーディングガイドラインに従って、プライベートフィールドの前にアンダースコアを付ける必要があります。それは私に1つの選択肢を残します。ゲッターに注釈を付けます。
誰かがなぜそれがこのように振る舞うのか説明するのを気にかけることができますか?