我有我的inputText兩個要求:在P的跳過Primefaces的inputText的驗證上keyup事件,但驗證上提交
- 值:inputText的應h中立即顯示在屏幕上:的outputText與KEYUP事件
- 值應該在數據庫中是唯一
我使用Primefaces 4.0,JSF 2.2 Glassfish的4和Java 7
我的代碼看起來是這樣的此刻
Example.xhtml
<h:form>
<p:inputText id="value" value="#{myBean.value}" >
<p:ajax event="keyup" update="example" process="@this" />
<f:validator binding="#{uniqueValueValidator}" />
</p:inputText>
<h:outputText id="example" value="#{myBean.value}">
<p:commandButton value="Save" action="#{myBean.saveValue}"/>
</form>
MyBean.java
@Named
@RequestScoped
public class MyBean {
@Inject
private DBService service;
private String value;
//getter, setter
public String saveValue() {
service.saveValue(value);
return "showall";
}
}
UniqueValueValidator.java
@Named
public class UniqueValueValidator implements Validator {
@Inject
private DBService service;
@Override
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException {
if(service.isValueNotUnique(value.toString()) {
// throw ValidatorException
}
}
}
我的問題是現在,這對每一個KEYUP事件的價值被驗證並且對數據庫進行調用。但我只想在表單提交時驗證該值。
我的第一個解決方案是將驗證移入saveValue
方法。
public String saveValue() {
if(service.isValueNotUnique(value) {
// add a FacesMessage
return null;
} else {
service.saveValue(value);
return "showall";
}
}
但是在這裏我認爲在一種方法中混用驗證碼和邏輯代碼並不是好習慣。
所以,我希望你對我有一個更好的解決方案;)