设置与日历输入相关的输入字段的值

时间:2014-05-29 10:18:55

标签: java jsf primefaces binding calendar

我正在使用Primefaces,我有一个输入字段,其值必须与输入日期相关,问题是可以通过单击日历或键入来选择日期,如果以第一种方式完成一切工作正常,但如果通过写入完成,则支持bean中的UIInput值为null。我不知道为什么绑定属性不正常或我做错了。

<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>

支持豆

@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的值是正确的,但是当写入日期时它是null。

对不起可能的语法或拼写错误

EDIT(溶液):

以下是有人需要的代码,感谢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>

1 个答案:

答案 0 :(得分:0)

您应该为change添加ajax事件:

<p:ajax event="change" oncomplete="document.getElementById('anadirForm:numeroAsiento').focus()"/>

与此问题无关,我认为混合p:ajaxf:ajax并不是一个好主意。
而且,除非你有充分的理由,否则你不应该在托管bean中使用UIComponent 请参阅this answer by BalusC for more explanations