ajax事件不起作用

时间:2016-11-15 09:47:19

标签: primefaces jsf-2

当复选框为true时,我有一个表单。这不会奏效。奇怪的是:我在另一个页面上做了完全相同的工作。此外,当在支持bean本身中使用另一个布尔属性时,它可以工作。

function calcRoute() { 
    var startValue =start.value;
    var endValue = end.value;
    var distanceInput = document.getElementById("distanceKm");
    var price = document.getElementById("price");


    var request = {
        origin:startValue, 
        destination:endValue,
        travelMode:google.maps.DirectionsTravelMode.DRIVING
    };

    directionsService.route(request, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
            distanceInput.value = response.routes[0].legs[0].distance.value / 1000; 
            price.value = parseFloat(distanceInput.value * 0.19).toFixed(2);

        }
    });         
}

2 个答案:

答案 0 :(得分:1)

有时,Primefaces会在组件在一个页面上运行的时刻出现,只是拒绝在另一个页面上工作。您在示例中发布的代码是正确的,如果在公司getter上设置断点,则最有可能,当触发ajax事件更改时,值将正确更新。发生的事情是您的组件未通过ajax正确刷新(或无法识别)。

我发现解决方案的解决方案是在OutputPanel中包含JSF的PanelGroup。我使用了你的代码的基础并做了下面的例子(显然用我的例子替换了我的项目中的标签。

<div class="field">
             <p:selectBooleanCheckbox id="company" 
                    value="# {participantDetailBean.participant.isCompany}">
                           <p:ajax event="change" update=":companyFields"/>
              </p:selectBooleanCheckbox>
    </div>

<p:outputPanel id="companyFields">
     <h:panelGroup id="companyFields2" rendered="#{participantDetailBean.participant.isCompany}">
          <div class="field">
                <p:outputLabel value="DISPLAY THIS FIELD"/>
          </div>
     </h:panelGroup>
</p:outputPanel>

虽然这不是最干净的解决方案,但它可能会帮助您摆脱目前陷入困境的困境,或指导您获得正确的答案。哦,并且在使用PanelGroup

时不要忘记包含JSF include标记
  

的xmlns:H =&#34; HTTP://xmlns.jcp.org/jsf/html"

答案 1 :(得分:-1)

尝试使用itemSelect事件。