Kata pengantar
Mengapa mengetik konverter di struts2?
: Struts2 hanya dapat memberikan konversi otomatis untuk 8 tipe asli dalam Java dan tipe umum seperti string dan tanggal.
Tapi ini pasti tidak dapat memenuhi kebutuhan kita jika kita ingin mengintegrasikan data halaman ke dalam Javabean. Saat Anda bertindak, tindakan apa yang didapat adalah objek, jadi persyaratan ini mengharuskan kami untuk menggunakan konverter tipe.
Sebagian besar waktu, menggunakan konverter tipe bawaan dan konverter tipe berbasis OGNL yang disediakan oleh Framework Struts2 dapat memenuhi sebagian besar kebutuhan konversi jenis; Namun, ada beberapa kasus khusus di mana serangkaian format yang ditentukan mungkin perlu dikonversi menjadi objek gabungan, dan konverter tipe khusus diperlukan. Misalnya, jika klien mengirim string seperti "Jelly | 123456" ke server, kita perlu mengonversi string ini menjadi contoh jenis pengguna, dengan "jelly" sebagai nama pengguna dan "123456" sebagai kata sandi pengguna.
Kelas Konversi Jenis Kustom
Ada halaman meja depan seperti ini:
<Form Action = "Login" Method = "Post"> Pengguna: <input type = "text" name = "userInfo"> <br> <input type = "kirim" value = "convert"> </form>
Kode tindakan yang sesuai adalah:
Pengguna Pribadi; // Ini adalah tipe senyawa tipe string private Tip; public void setUsers (pengguna pengguna) {this.user = user;} pengguna publik getUser () {return user;}Kami berharap pengguna memasukkan string di halaman latar depan dengan format "nama pengguna | kata sandi" dan mengonversi string dalam format "nama pengguna | kata sandi" ke jenis pengguna melalui konverter jenis kustom. Mari kita bicara tentang cara mengimplementasikan konverter tipe kustom.
Konverter tipe Struts2 sebenarnya masih didasarkan pada kerangka kerja OGNL. Ada antarmuka TypeConverter dalam proyek OGNL, yang merupakan antarmuka yang harus diimplementasikan oleh konverter tipe khusus. Kode definisi antarmuka ini adalah sebagai berikut:
// OGNL Menyediakan TypeConverter Antarmuka Publik {Public Object ConvertValue (Konteks Peta, Target Objek, Anggota Anggota, String PropertyName, Nilai Objek, Totype Kelas);}Untuk mengimplementasikan konverter tipe, Anda harus mengimplementasikan typeConverter di atas, tetapi metode dalam antarmuka di atas terlalu kompleks, sehingga proyek OGNL juga menyediakan kelas implementasi untuk antarmuka ini: DefaultTypeConverter, yang biasanya menggunakan kelas ini untuk mengimplementasikan konverter tipe khusus. Menerapkan Konverter Jenis Kustom Membutuhkan Pengesampingan Metode ConvertValue dari Kelas DefaultTypeConverter.
Berikut ini adalah kelas konversi yang dikonversi ke instance kelas pengguna:
UserConverter kelas publik memperluas defaultTypeConverter {public object convertValue (konteks peta, nilai objek, class totype) {if (totype == user.class) {// Ketika Anda perlu mengonversi string ke jenis pengguna // parameter permintaan sistem adalah nilai string array [] params = (string []); // Buat Pengguna Pengguna Pengguna Pengguna = pengguna baru (); // Hanya memproses elemen array pertama dari array parameter permintaan, dan membagi string menjadi dua string dengan '|' simbol string [] userValues = params [0] .split ("// |"); // Tetapkan nilai ke pengguna pengguna.setname (userver [0]); user.setPassword (UserValues [1]); Pengguna Kembali; } lain jika (totype == string.class) {// ketika perlu untuk mengonversi jenis pengguna ke nilai pengguna string pengguna = (pengguna); kembalikan "<" + user.getname () + "|" + user.getPassword () + ">"; } return null; }}Fungsi metode convertValue sangat sederhana. Metode ini bertanggung jawab untuk menyelesaikan konversi jenis, tetapi konversi ini adalah dua arah. Jenis target dinilai berdasarkan totype parameter, dan kemudian kita dapat mengimplementasikan logika konversi dalam dua arah.
Daftarkan Konverter Jenis
Memiliki konverter tipe tidak cukup, karena kerangka struts2 tidak tahu kapan harus menggunakan konverter tipe ini, sehingga konverter jenis harus terdaftar dalam aplikasi web, sehingga kerangka struts2 dapat menggunakan konverter tipe ini secara normal.
Struts2 terutama mendukung dua cara berikut untuk mendaftarkan konverter jenis:
Mari kita bicara tentang dua metode di atas untuk mendaftarkan konverter jenis.
Konverter tipe lokal
Struts2 memungkinkan pengembang untuk menentukan informasi konfigurasi untuk konversi jenis melalui file konversi jenis lokal. File Konversi Jenis adalah file Properties (*.Properties) biasa. Nama file dari file konversi tipe lokal harus dalam bentuk ActionName -conversion.properties, di mana ActionName adalah nama tindakan yang perlu dikonversi ke file dengan tipe ini, dan string -Conversion.properties berikutnya adalah bagian yang tetap. File Konversi Jenis harus ditempatkan di lokasi yang sama dengan file kelas Action.
Setelah berbicara tentang file konversi tipe lokal, mari kita terus berbicara tentang konverter tipe lokal yang terdaftar. Untuk mendaftarkan konverter tipe lokal, Anda hanya perlu menambahkan baris konfigurasi berikut ke file konverter tipe lokal:
<PropName> = <ConverTerClass>
Ganti <propname> di atas dengan properti yang perlu dikonversi tipe, dan ganti <Von ConverterClass> dengan kelas implementasi dari konverter tipe. Untuk kelas UserConverter yang diimplementasikan di atas, perlu untuk mengonfigurasinya di file konversi tipe lokal sebagai berikut:
# Untuk menentukan atribut pengguna, Anda perlu menggunakan kelas UserConverter untuk menyelesaikan tipe konversi pengguna = com.jellythink.practise.userconverter
Konverter tipe global
Keterbatasan konverter tipe lokal terlalu jelas, dan mereka hanya dapat bekerja pada tindakan tertentu dan properti yang ditentukan. Namun, jika beberapa tindakan dalam aplikasi berisi atribut jenis pengguna, atau satu tindakan berisi atribut dari beberapa jenis pengguna, akan lebih tepat untuk menggunakan konverter tipe global.
Konverter tipe global tidak bekerja pada properti yang ditentukan dari tindakan yang ditentukan, tetapi pada jenis yang ditentukan. Misalnya, ini berfungsi untuk semua properti tipe com.jellythink.practise.user.
Mendaftarkan konverter tipe global harus menyediakan file xwork-conversion.properties, yang merupakan file konverter tipe global. Anda harus langsung menempatkan file di bawah jalur Web-INF/kelas aplikasi Web.
Konten file konversi tipe global terdiri dari beberapa item <PropType> = <VonvertClass>. Ganti PropType dengan tipe yang perlu dikonversi tipe, dan mengganti ConvertClass dengan kelas implementasi konverter tipe. Untuk kelas UserConverter yang diimplementasikan di atas, perlu untuk mengonfigurasinya dalam file konversi tipe global sebagai berikut:
com.jellythink.practise.user = com.jellythink.practise.userconverter
"Lokal" vs "global"
Konversi tipe lokal hanya dapat mengonversi atribut yang ditentukan dari tindakan yang ditentukan. Terlepas dari apakah atribut dari tindakan tersebut adalah array atau jenis koleksi, metode konversi konverter hanya mengonversi atribut sekali. Jika suatu tindakan memiliki Daftar <user> pengguna properti, konverter tipe lokal akan menghubungi metode convertValue () hanya sekali, yang mengonversi parameter meminta pengguna ke objek koleksi daftar <user> pada satu waktu.
Konverter Jenis Global akan mengonversi semua jenis tindakan tertentu. Jika atribut suatu tindakan adalah jenis array atau pengumpulan, dan elemen array atau koleksi adalah metode yang mengharuskan konverter untuk mengonversi, maka konverter tipe global tidak akan mengonversi seluruh atribut set, tetapi akan mengonversi setiap elemen atribut set. Artinya, ketika atributnya adalah array atau koleksi, array atau koleksi berisi beberapa elemen jenis, maka metode convertValue () akan disebut beberapa kali.
Setelah terbiasa dengan perbedaan antara keduanya, saya akan lebih memperhatikannya dalam pekerjaan saya di masa depan; Terutama perbedaan antara array dan set elemen saat mengonversinya.
Konverter Jenis Kustom Berdasarkan Struts2
Di atas memperkenalkan arah konversi dengan mewarisi kelas DefaultTypeConverter, dalam metode ConvertValue, arah konversi dinilai dengan menilai parameter totype, dan kemudian logika konversi untuk arah konversi yang berbeda diimplementasikan secara terpisah. Dalam kerangka struts2, untuk menyederhanakan implementasi konverter tipe, kelas abstrak strutstypeConverter disediakan khusus, yang merupakan subkelas dari kelas defaultTypeConverter. Ini telah mengimplementasikan metode ConvertValue dari kelas DefaultTypeConverter; Saat mengimplementasikan metode ini, itu mengubah konversi ke dua arah yang berbeda dengan menilai parameter totype dalam metode convertValue menjadi memanggil dua metode berbeda:
Yang perlu kita lakukan adalah mewarisi kelas abstrak StrutstypeConverter dan mengimplementasikan dua metode abstrak: convertFromString dan convertToString.
Kode yang dimodifikasi adalah sebagai berikut:
UserConverter kelas publik memperluas strutstypeConverter {objek publik ConvertFromString (peta konteks, string [] nilai, kelas toClass) {user user = new user (); String [] userValues = nilai [0] .split ("// |"); user.setname (UserValues [0]); user.setPassword (UserValues [1]); Pengguna Kembali; } public String convertToString (konteks peta, objek o) {// ketika perlu untuk mengonversi jenis pengguna ke pengguna string pengguna = (pengguna) o; kembalikan "<" + user.getname () + "|" + user.getPassword () + ">"; }}Meringkaskan
Artikel ini merangkum konverter tipe kustom di Struts2 secara detail, dan ide keseluruhannya adalah sebagai berikut:
Hanya beberapa langkah untuk menyelesaikan konverter tipe khusus.
Oke, di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.