【问题标题】:Ajax listener and Converter on multiple fields - new value not passed to listener多个字段上的 Ajax 侦听器和转换器 - 新值未传递给侦听器
【发布时间】:2014-02-15 05:54:24
【问题描述】:

我需要根据“pickuphour”中选择的值更新“pickupdate”。

我的问题是,当调用更新监听器时,新选择的 'pickuphour' 值在监听器方法中不可用。

似乎在转换器更新我的 bean 'pickuptime' 值之前调用了侦听器。

(我在这里使用了 DatePartConverter:Binding more than one input field to a backing bean property by using Java Server Faces?)

如何在侦听器方法之前或期间获取新选择的小时值?

<h:panelGroup>
                <h:form id="pickuptime">
                    <p:selectOneMenu id="pickupdate" widgetVar="pickupdate" value="#{journeyCRUD.pickuptime}" immediate="true"> 
                            <f:selectItem itemLabel="Today" itemValue="#{journeyCRUD.dateList[0]}" noSelectionOption="true"/>  
                            <f:selectItem itemLabel="Tomorrow" itemValue="#{journeyCRUD.dateList[1]}" /> 
                            <f:selectItems value="#{util:subList(journeyCRUD.dateList, 2, 30)}" var="date" itemValue="#{date}" itemLabel="#{util:formatDate(date, 'EEE dd MMM yyyy','EEE dd MMM')}"/>
                            <f:converter converterId="datePartConverter"/>
                            <f:attribute name="part" value="date"/>
                            <f:ajax execute="@this pickuphour pickupmin"/>
                    </p:selectOneMenu> 
                    <p:selectOneMenu id="pickuphour" widgetVar="pickuphour" value="#{journeyCRUD.pickuptime}" immediate="true" >
                            <f:selectItems value="#{journeyCRUD.hourList}"/> 
                            <f:converter converterId="datePartConverter"/>
                            <f:attribute name="part" value="hour"/>
                            <f:ajax event="change" listener="#{journeyCRUD.updatePickupDate}" execute="@this pickupmin"  render="pickupdate" immediate="true"/>
                    </p:selectOneMenu> 
                    <p:selectOneMenu id="pickupmin" widgetVar="pickupmin" value="#{journeyCRUD.pickuptime}" immediate="true">  
                            <f:selectItems value="#{journeyCRUD.minuteList}"/> 
                            <f:converter converterId="datePartConverter"/>
                            <f:attribute name="part" value="minutes"/>
                    </p:selectOneMenu> 
                    </h:form>
                </h:panelGroup>

【问题讨论】:

    标签: ajax jsf converter


    【解决方案1】:

    此转换器仅在设置所有值后返回更新的模型值。如果你想继续使用这个转换器,最好的办法是直接从&lt;f:ajax listener&gt; 参数可用的组件中提取它。

    public updatePickupDate(AjaxBehaviorEvent event) {
        UIInput component = (UIInput) event.getComponent();
        Object value = Component.getValue();
        // ...
    }
    

    【讨论】:

    • 试过了,但 'value' 仍然是之前选择的值,而不是新值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2019-03-29
    • 2014-07-22
    • 1970-01-01
    • 2013-05-23
    • 2017-10-05
    相关资源
    最近更新 更多