2012-10-09 36 views
0

我试图将正常的bean验证附加到以编程方式生成的Primefaces UIComponent上的模糊事件。如何将ajax验证添加到以编程方式生成的primefaces组件

如果我手动创建使用XHTML的组件,它工作得很好,它看起来像这样:

<p:inputText id="customerName" value="#{editCustomerBean.name}" label="Name"> 
    <p:ajax async="true" event="blur" update="customerName, customerNameMsg" /> 
</p:inputText> 

不幸的是我需要产生的,因为这将基于填充一些动态属性的飞这个组件运行时数据。该代码我写了尝试,并准确地复制此组件:当我生成这样,这个组件

UIInput input = new InputText(); 

AjaxBehavior ajax = new AjaxBehavior(); 
ajax.setAsync(true); 
ajax.setUpdate("customerName, customerNameMsg"); 
input.addClientBehavior("blur", ajax); 
input.setId("customerName"); 
input.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{editCustomerBean.name}", String.class)); 

,我看到发送到执行模糊事件的服务器的请求,但没有确认发生。这是发布的请求看起来相同的是,当我指定XHTML组件被发送:

javax.faces.partial.ajax=true&javax.faces.source=mainForm%3AcustomerName&javax.faces.partial.execute=mainForm%3AcustomerName&javax.faces.partial.render=mainForm%3AcustomerName+mainForm%3AcustomerNameMsg&javax.faces.behavior.event=blur&javax.faces.partial.event=blur&mainForm%3AcustomerName=&javax.faces.ViewState=8176624577669857830%3A-4154840965136338204 

我已经看到张贴本网站和Primefaces论坛上类似的问题,但它通常涉及连接监听器的方法AjaxBehavior,这不是我在这里要做的。当没有指定侦听器时,我希望该行为与标记相同,即验证字段。

回答

1

原来我正在吠叫看着ajax组件的错误树。我今天意识到,我的组件在提交时未被验证。事实证明,当您动态创建JSF组件时,您需要手动向组件注册BeanValidator。感谢维克多·埃雷拉他对这个问题的回答:https://stackoverflow.com/a/7055586/1535568

2

的实例添加onBlur事件动态

Message message=new Message(); 
    message.setId("msg"); 
    InputText it = new InputText(); 
    it.setId("input1"); 
    it.setRequired(true); 
    message.setFor(it.getId()); 

    //******Setting validation render at onBlur event 
    AjaxBehavior ajaxBehavior=new AjaxBehavior(); 
    ajaxBehavior.setAsync(true); 
    ajaxBehavior.setUpdate(message.getId()); 
    it.addClientBehavior("blur", ajaxBehavior); 
    //************************************************ 
相关问题