【发布时间】:2014-06-04 10:17:15
【问题描述】:
我的文本框的 html/jsf 代码是:
<p:inputText id="trainingNo" value="#{cpeTrainingMB.cpeTrainingObj.trainingNo}"
required="true" requiredMessage="Please Enter Training Number" binding="#{trainingNoComponent}">
<f:validator validatorId="trainingNoValidator"/>
<f:attribute name="trainingNoComponent" value="#{trainingNoComponent}"/>
</p:inputText>
我的验证器类是:
@FacesValidator("trainingNoValidator")
public class TrainingNoValidator implements Validator{
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value == null) {
return;
}
UIInput trainingNoComponent = (UIInput) component.getAttributes().get("trainingNoComponent");
if (!trainingNoComponent.isValid()) {
return;
}
Integer trainingNumber = (Integer) trainingNoComponent.getValue();
System.err.println(trainingNumber);
if (trainingNumber < 1) {
return;
}
if (Integer.valueOf(DirectSqlUtils.
getSingleValueFromTable("SELECT ISNULL((SELECT ISNULL(training_no, 0) FROM [dbo].[cpe_training] "
+ "WHERE training_no = '"+trainingNumber+"'), 0)")
.toString()) != 0) {
System.err.println("Hello : "+DirectSqlUtils.
getSingleValueFromTable("SELECT ISNULL((SELECT ISNULL(training_no, 0) FROM [dbo].[cpe_training] "
+ "WHERE training_no = '"+trainingNumber+"'), 0)")
.toString());
trainingNoComponent.setValid(false);
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,"Training Number invalid.",null));
}
}
}
问题是当我将 UI 中的文本设置为 1,2 或 3 等时;来自事件的对象总是返回 0(零)而不是插入的文本。所以验证不能正常工作。我是 JSF 的新手。
【问题讨论】:
-
可能验证工作正常。我认为你应该调试你的大 if 条件(第三个)。
标签: jsf jsf-2 primefaces