我需要知道是否有办法使用Primefaces / JSF进行实时验证?
我的要求看似简单:
我有一个输入框,只能使用唯一的名称。对于例如..,如果用户想要输入已存在于数据库中的名称,则为 应抛出“用户名已存在”等错误消息。这个 应该在用户移出输入框后立即发生
可以从Google注册页面推断出参考资料
我花了很多时间在互联网上进行研究,但还没有找到任何具体的解决方案。
我主要是在 Primefaces / JSF 中寻找解决方案。有可能吗?
答案 0 :(得分:2)
你可以用普通的JSF做到这一点。您只需使用验证器并在输入字段中添加ajax行为,例如
<强>的facelet 强>
<h:form id="form">
<h:messages id="messages" />
<h:inputText value="#{anyBean.username}" validator="userValidator">
<f:ajax render="@this messages" />
</h:inputText>
</h:form>
<强>验证强>
@FacesConverter("userValidator")
public class UserValidator implements Validator {
@Override
public void validate(FacesContext fc, UIComponent component, Object value) throws ValidatorException {
String username = (String) value;
if (usernameExists(username)) {
throw new ValidatorException(new FacesMessage("User Name already exists."));
}
}
private boolean usernameExists(String username) {
// check if username exists here
}
}
当然你也可以使用等效的PrimeFaces组件p:messages,p:inputText和p:ajax。
答案 1 :(得分:-1)
使用Primefaces,试试这个xhtml:
<h:form>
<p:panel id="panel" header="Unique Name">
<p:messages id="msgs" />
<p:outputLabel for="uniqueName" value="UniqueName:" />
<p:inputText id="uniqueName" value="#{yourMB.uniqueName}" required="true">
<p:ajax update="msgUniqueName" event="keyup" listener="#{yourMB.check()}" />
</p:inputText>
</p:panel>
</h:form>
在您的ManagedBean中:
@ManagedBean
public class YourMB {
private String uniqueName;
private List<Name> listNames;
public void check() {
if(listNames == null) {
listNames = nameService.getAllNamess();
//you need declare & implement an appropriate service
} else {
for(Name name listNames) {
if(name.getName().equals(uniqueName) {
FacesMessage message = new FacesMessage(uniqueName + " already exists!");
FacesContext.getCurrentInstance().addMessage(null, message );
}
}
}
}
public String getUniqueName() {
return uniqueName;
}
public void setUniqueName(String uniqueName) {
this.uniqueName = uniqueName;
}
}