从javascript调用setter bean

时间:2014-04-09 18:12:40

标签: java javascript jquery java-ee primefaces

我在很长一段时间里搜索过,但我找不到。我想从jquery地址选择器中选择一个地址,它使用gmap api并绑定我的bean中的所有字段。自动完成和地址字段工作正常但所有其他字段都不起作用(空或空字符串)。

这是我的代码:

Javascript:

<script>
    function initialize() {
        if (document.getElementById("map_form:panel:addresspicker_map")) {
            var addresspickerMap = $("#map_form\\:panel\\:addresspicker_map").addresspicker({
                regionBias: "fr",
                reverseGeocode: true,
                mapOptions: {
                    zoom: 4,
                    center: new google.maps.LatLng(46, 2),
                    scrollwheel: false,
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    reverseGeocode: true
                },
                elements: {
                    map: "#map",
                    lat: "#map_form\\:panel\\:lat",
                    lng: "#map_form\\:panel\\:lng",
                    street_number: '#map_form\\:panel\\:street_number',
                    route: '#map_form\\:panel\\:route',
                    locality: '#map_form\\:panel\\:locality',
                    administrative_area_level_2: '#map_form\\:panel\\:administrative_area_level_2',
                    administrative_area_level_1: '#map_form\\:panel\\:administrative_area_level_1',
                    country: '#map_form\\:panel\\:country',
                    postal_code: '#map_form\\:panel\\:postal_code',
                    type: '#map_form\\:panel\\:type'
                }
            });

            var gmarker = addresspickerMap.addresspicker("marker");
            gmarker.setVisible(true);
            addresspickerMap.addresspicker("updatePosition");

            // Update zoom field
            var map = $("#map_form\\:panel\\:addresspicker_map").addresspicker("map");
            google.maps.event.addListener(map, 'idle', function() {
                $('#map_form\\:panel\\:zoom').val(map.getZoom());
            });
        }

    }
    ;
</script>

我的JSF页面:

<p:tab id="address_site" title="Adresse du site">
    <h:panelGrid columns="2">
        <h:outputText value="Addresse" />
        <p:inputText onfocus="initialize();" id="addresspicker_map" value="#{contratsController.currentSiteCreate.address}"/>
    </h:panelGrid>
</p:tab>
<p:tab id="address_details_site" title="Adresse détaillée">
    <h:panelGrid columns="2">
        <h:outputText value="Street Number" />
        <p:inputText id="street_number" disabled="true" value="#{contratsController.currentSiteCreate.street_number}"/>
        <h:outputText value="Route" />
        <p:inputText id="route" disabled="true" value="#{contratsController.currentSiteCreate.route}"/>
        <h:outputText value="Postal Code" />
        <p:inputText id="postal_code" disabled="true" value="#{contratsController.currentSiteCreate.postal_code}"/>
        <h:outputText value="Locality" />
        <p:inputText id="locality" disabled="true" value="#{contratsController.currentSiteCreate.locality}"/>
        <h:outputText value="District" />
        <p:inputText id="administrative_area_level_2" disabled="true" value="#{contratsController.currentSiteCreate.district}"/>
        <h:outputText value="State/Province" />
        <p:inputText id="administrative_area_level_1" disabled="true" value="#{contratsController.currentSiteCreate.state_province}"/>
        <h:outputText value="Country" />
        <p:inputText id="country" disabled="true" value="#{contratsController.currentSiteCreate.country}"/>
        <h:outputText value="Lat" />
        <p:inputText id="lat" disabled="true" value="#{contratsController.currentSiteCreate.latitude}"/>
        <h:outputText value="Lng" />
        <p:inputText id="lng" disabled="true" value="#{contratsController.currentSiteCreate.longitude}"/>
        <h:outputText value="Zoom" />
        <p:inputText id="zoom" disabled="true" value="#{contratsController.currentSiteCreate.zoom}"/>
        <h:outputText value="Type" />
        <h:inputText id="type" disabled="true" value="#{contratsController.currentSiteCreate.type}"/>
        <h:outputText value="Map" />
        <div id="map"></div>
    </h:panelGrid>
</p:tab>
<p:tab id="confirmation_site" title="Confirmation">
    <h:commandButton styleClass="btn btn-success btn-lg btn-block" actionListener="#{contratsController.addSite}" value="Ajouter" />
</p:tab>

当我按下commandButton时, contratsController.currentSiteCreate.address 填好,但其他所有字段都为空或空。

1 个答案:

答案 0 :(得分:0)

出于安全原因,当输入为disabled="true"readonly="true"时,JSF和PrimeFaces不会处理值。

因此,为了完成您的场景,我建议您为每个禁用的输入使用JSF隐藏字段,这样您的隐藏字段将保存值,而您的输入将仅用于显示。 您的页面将是这样的:

 <h:outputText value="Street Number" />
 <p:inputText id="street_number" disabled="true" value=""/>
 <h:inputHidden id="street_number_hidden" value="#{contratsController.currentSiteCreate.street_number}" />

 <h:outputText value="Route" />
 <p:inputText id="route" disabled="true" value=""/>
 <h:inputHidden id="route_hidden" value="#{contratsController.currentSiteCreate.route}"/>

 ...