Saya mencoba memproses beberapa baris data masukan, menggunakan metode JavaScript yang menggunakan layanan geocoding yang disediakan Google, dan menempatkan data yang diproses tersebut ke dalam backing bean.
Pengguna disajikan dengan halaman login di mana mereka memasukkan rincian alamat mereka. Segera setelah tombol kirim diklik, saya mencoba melakukan geocode alamat mereka dengan memanggil metode JavaScript. Metode ini membaca data yang dimasukkan oleh pengguna dan mengirimkannya ke layanan geocode. Layanan ini memerlukan waktu beberapa milidetik untuk diselesaikan. Segera setelah selesai saya ingin menyimpan data yang ditemukan di backing bean halaman login.
Fungsi JavaScript berikut digunakan untuk melakukan geocode alamat.
function codeAddress() {
alert('coding address');
geocoder = new google.maps.Geocoder();
postcode = document.getElementById('loginForm:address').value;
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
alert('setting location: '+results[0].geometry.location);
document.getElementById('loginForm:location').value = results[0].geometry.location;
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
Ia menyimpan nilainya di bidang tersembunyi yang ditempatkan di dalam formulir. Saya tidak tahu apakah ini yang terbaik untuk dilakukan atau tidak, ini hanya sesuatu yang saya lihat di banyak contoh. Saya berasumsi pengaturan nilai komponen ini akan memanggil penyetel lokasi yang sesuai di loginBean.
<h:inputHidden id="location" value="#{loginBean.location}" />
Saya mencoba mewujudkan semua ini menggunakan tombol yang digunakan untuk mengirimkan formulir.
<p:commandButton id="submitButton" value="login"
action="#{loginBean.doLogin}"
styleClass="blue login" update="growl">
<p:ajax event="click" onstart="codeAddress()" />
</p:commandButton>
Saya harus menambahkan bahwa saya tidak yakin dengan konstruksi ini. Menekan tombol kirim mungkin akan langsung memuat halaman berikutnya, bahkan tanpa memberi kesempatan pada panggilan ajax.
Mencoba mencapai hal ini telah memberi saya beberapa masalah. Dengan menggunakan kode di atas, fungsi JavaScript tidak pernah dipanggil. Demi kesederhanaan saya telah mendeklarasikan fungsi ini di bagian atas halaman dalam tag skrip. Masalah kedua adalah tidak jelas bagi saya pendekatan apa yang terbaik untuk meneruskan nilai ini dari metode JavaScript ke loginBean. Haruskah saya menempatkan beberapa tag tersembunyi di dalam formulir dan menautkan tag nilainya ke properti loginBean? Haruskah saya menambahkan pendengar ke komponen ajax?
onstart="codeAddress"
? Jika sudah ganti ini denganonstart="codeAddress()"
. - person partlov   schedule 26.02.2013<h:outputScript name="js/myFile.js" target="head" />
, letakkan file js di folder WebContent\resource - person Daniel   schedule 26.02.2013