【问题标题】:Set value of input field in relation to calendar input设置与日历输入相关的输入字段值
【发布时间】:2014-05-29 10:18:54
【问题描述】:

我正在使用 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>

支持 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的值是对的,但是写入日期时为null。

抱歉可能出现语法或拼写错误

编辑(解决方案):

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

【问题讨论】:

    标签: java jsf primefaces binding calendar


    【解决方案1】:

    你应该为change添加一个ajax事件:

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

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

    【讨论】:

    • 使用 event="change" 我仍然没有得到 bean 中的值,只有通过单击日历而不是键入来选择它。
    • 只是一个问题,当您在输入之外单击(或单击选项卡)时它不起作用?
    • 如果我使用 &lt;p:ajax event="focus" 我不能使用渲染,如果我使用 `
    • 对于日历绑定,您可以在托管 bean 中创建一个 Date 属性,并让 p:calendar 的值指向它
    • Ajax 正在执行,但是输入时 fecha 的值为 null。
    猜你喜欢
    • 2011-11-28
    • 2013-08-25
    • 2013-04-12
    • 1970-01-01
    • 2019-05-07
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多