我使用Primefaces,我有一个输入字段,其值必须根据输入日期生成,问题是可以通过点击日历或键入来选择日期,如果以第一种方式完成,一切都正确工作,但如果通过书写完成,则支持bean中的UIInput值为空。我不知道为什么绑定属性不能正常工作,或者我做错了什么。
<p:calendar id="fechaContable"
value="#{movimientoBean.movimientoCab.fechaContable}" pattern="dd/MM/yyyy" binding="#{movimientoBean.fecha}" required="true"
requiredMessage="Se necesita fechaContable">
<p:ajax event="dateSelect" oncomplete="document.getElementById('anadirForm:numeroAsiento').focus()"/>
</p:calendar>
<p:inputText id="numeroAsiento"
binding="#{movimientoBean.numeroAsiento}" value="#{movimientoBean.movimientoCab.numeroAsiento}" required="false">
<f:ajax event="focus" render=":anadirForm:numeroAsiento" listener="#{movimientoBean.numAsiento}"/>
</p:inputText>
后台bean
@ManagedBean
@ViewScoped
public class MovimientoBean implements Serializable{
......
private transient UIInput numeroAsiento;
private transient UIInput fecha;
......
public void numAsiento(){
.....
try {
Date date = dateFormat.parse(fecha.getValue().toString());
fechaContable = sdf.format(date);
}catch (ParseException e){
}
}
当dateSelect被调用时,UIInput fecha的值是正确的,但是当date被写入时,它是空的。
很抱歉可能有语法或拼写错误
编辑(解决方案):
这里是代码工作,以防有人需要它,感谢Laabidi Raissi的帮助和信息:
<p:calendar id="fechaContable"
value="#{movimientoBean.movimientoCab.fechaContable}" pattern="dd/MM/yyyy" required="true"
requiredMessage="Se necesita fechaContable">
<p:ajax event="dateSelect" update=":anadirForm:numeroAsiento" listener="#{movimientoBean.numAsiento}" oncomplete="document.getElementById('anadirForm:numeroAsiento').focus()"/>
<p:ajax event="change" update=":anadirForm:numeroAsiento" listener="#{movimientoBean.numAsiento}" oncomplete="document.getElementById('anadirForm:numeroAsiento').focus()"/>
</p:calendar>
<p:inputText id="numeroAsiento"
value="#{movimientoBean.movimientoCab.numeroAsiento}" required="false">
</p:inputText>
您应该为change
添加一个ajax事件:
<p:ajax event="change" oncomplete="document.getElementById('anadirForm:numeroAsiento').focus()"/>
与问题无关,我认为混合p:ajax
和f:ajax
不是一个很好的主意。
而且,除非有充分的理由,否则不应该在托管bean中使用UIComponent
s。
有关更多解释,请参阅BalusC的回答