1. Internasionalisasi
Siapkan file sumber daya. Format penamaan file sumber daya adalah sebagai berikut:
nama_dasar_bahasa_negara.properti
nama_dasar.properti
nama dasar.properti
Diantaranya, baseName adalah nama dasar file sumber daya yang dapat kita sesuaikan, tetapi bahasa dan negara harus merupakan bahasa dan negara yang didukung oleh java. menyukai:
Tiongkok Daratan: baseName_zh_CN.properties
Amerika Serikat: baseName_en_US.properties
Sekarang tambahkan dua file sumber daya ke aplikasi:
Yang pertama menyimpan bahasa Mandarin: csdn_zh_CN.properties
Isinya adalah: selamat datang=Selamat datang di Podcast Chuanzhi Penyimpanan kedua dalam bahasa Inggris (Amerika Serikat): csdn_en_US.properties
Isinya adalah: selamat datang=selamat datang di csdn
Untuk file properti berbahasa Mandarin, setelah kita menulisnya, kita harus menggunakan perintah native2ascii yang disediakan oleh jdk untuk mengonversi file menjadi file berkode unicode. Perintah yang digunakan sebagai berikut:
file sumber native2ascii.properti file target.properti
2. Konfigurasikan sumber daya global dan keluaran informasi internasional
Setelah menyiapkan file sumber daya, kita dapat mendefinisikan file sumber daya sebagai file sumber daya global melalui konstanta struts.custom.i18n.resources di struts.xml, sebagai berikut:
<nama konstan="struts.custom.i18n.resources" value="csdn" />
csdn adalah nama dasar file sumber daya.
Nanti informasi internasionalisasinya bisa kita akses di halaman atau di action:
Gunakan tag <s:text name=""/> di halaman JSP untuk menampilkan informasi internasionalisasi:
<s:text name="user"/>, nama adalah kunci dalam file sumber daya
Di kelas Action, Anda dapat mewarisi ActionSupport dan menggunakan metode getText() untuk memperoleh informasi internasionalisasi. Parameter pertama metode ini digunakan untuk menentukan kunci dalam file sumber daya.
Di tag formulir, tentukan kunci dalam file sumber daya melalui atribut key, seperti:
<s:nama kolom teks="nama asli" key="pengguna"/>
3. Internasionalisasi - Keluarkan informasi internasionalisasi dengan placeholder
Isi file sumber daya adalah sebagai berikut:
selamat datang= {0}, selamat datang di Podcast Chuanzhi {1}
Keluarkan informasi internasionalisasi dengan placeholder di halaman jsp
<s:teks nama="selamat datang">
<s:param><s:property value="nama asli"/></s:param>
<s:param>Pembelajaran</s:param>
</s:teks>
Untuk memperoleh informasi internasionalisasi dengan placeholder di kelas Action, Anda dapat menggunakan metode getText(String key, String[] args) atau getText(String aTextName, List args) .
4. Internasionalisasi - cakupan file sumber daya
Dalam aplikasi berukuran besar, seluruh aplikasi memiliki sejumlah besar konten yang perlu diinternasionalisasikan. Jika kita menempatkan semua konten yang diinternasionalkan dalam file atribut sumber daya global, hal ini jelas akan menyebabkan file sumber daya menjadi terlalu besar, membengkak, dan merepotkan. untuk memelihara. Kadang-kadang kita dapat menggunakan lingkup paket untuk mengatur file internasionalisasi untuk modul yang berbeda.
Begini caranya:
Tempatkan file sumber daya package_lingual_country.properties di bawah paket java. Paket adalah metode penulisan tetap di bawah paket ini dan sub-paket dapat mengakses sumber daya ini. Saat mencari pesan dengan kunci tertentu, sistem akan mencari terlebih dahulu dari file sumber daya paket. Jika kunci terkait tidak dapat ditemukan, sistem akan mencari dari file sumber daya yang ditentukan oleh konstanta struts.custom.i18n.resources.
5. File sumber daya cakupan Aksi-Internasionalisasi
Kita juga dapat menentukan file sumber daya secara terpisah untuk suatu tindakan sebagai berikut:
Di jalur tempat kelas Action berada, tempatkan file sumber daya ActionClassName_science_country.properties. ActionClassName adalah nama sederhana dari kelas action.
Saat mencari pesan dengan kunci yang ditentukan, sistem akan mencari terlebih dahulu dari file sumber daya ActionClassName_lingual_country.properties. Jika kunci yang sesuai tidak ditemukan, maka sistem akan mencari file sumber daya dengan paket nama dasar di sepanjang paket saat ini hingga ditemukan paket tingkat atas. Jika kunci yang sesuai belum ditemukan, kunci tersebut akhirnya akan dicari dari file sumber daya yang ditentukan oleh konstanta struts.custom.i18n.resources.
6. Internasionalisasi - akses langsung ke file sumber daya di JSP
Struts2 memberi kita tag <s:i18n>. Dengan menggunakan tag <s:i18n> kita dapat memperoleh data internasional langsung dari file sumber daya di classpath tanpa konfigurasi apa pun:
<s:i18n nama="csdn">
<s:teks nama="selamat datang"/>
</s:i18n>
csdn adalah nama dasar file sumber daya di jalur kelas.
Jika file sumber daya yang ingin Anda akses berada di bawah paket tertentu di classpath, Anda dapat mengaksesnya seperti ini:
<s:i18n nama="cn/csdn/action/package">
<s:teks nama="selamat datang">
<s:param>Xiao Zhang</s:param>
</s:teks>
</s:i18n>
Di atas mengakses file sumber daya yang pada dasarnya bernama paket di bawah paket cn.csdn.action.
7. Bahasa Ekspresi OGNL
OGNL adalah singkatan dari Object Graphic Navigation Language, yang merupakan proyek sumber terbuka. Kerangka kerja Struts 2 menggunakan OGNL sebagai bahasa ekspresi default.
Dibandingkan dengan ekspresi EL, ekspresi ini menyediakan beberapa fungsi yang biasanya kita perlukan, seperti:
Mendukung panggilan metode objek, seperti xxx.sayHello();
Mendukung pemanggilan metode statis kelas dan akses nilai. Format ekspresi adalah @[nama kelas lengkap (termasuk jalur paket)]@[nama metode |. , 'bar') atau @cn.csdn.Constant@APP_NAME;
Memanipulasi objek koleksi.
Ognl memiliki konsep konteks, terus terang, konteks adalah struktur MAP, yang mengimplementasikan antarmuka java.utils.Map. Di Struts2, implementasi konteks adalah ActionContext.
Untuk mengakses objek dalam konteks, Anda perlu menggunakan simbol # untuk menandai namespace, seperti #application, #session
Selain itu, OGNL akan menetapkan objek root (objek root). Di Struts2, objek root adalah ValueStack (value stack). Jika Anda ingin mengakses properti objek di objek root (yaitu ValueStack), Anda dapat menghilangkan # namespace dan langsung mengakses properti objek.
Di struts2, kelas implementasi objek root ValueStack adalah OgnlValueStack. Objek ini tidak hanya menyimpan satu nilai seperti yang kita bayangkan, tetapi menyimpan sekelompok objek. Ada variabel root tipe Daftar di kelas OgnlValueStack, yang digunakan untuk menyimpan sekelompok objek.
|--permintaan
|--aplikasi
konteks ------|--Variabel root OgnlValueStack [aksi, OgnlUtil, ... ]
|--sesi
|--attr
|--parameter
Objek pertama dalam variabel root disebut objek teratas pada tumpukan. Biasanya kita dapat mengakses properti objek di variabel root dengan langsung menuliskan nama properti di ekspresi OGNL. Urutan pencarian dimulai dari objek di bagian atas tumpukan. Jika properti tidak ada pada objek di tumpukan paling atas, akan dicari dari objek kedua, jika tidak ditemukan, cari dari objek ketiga, dan akses secara berurutan hingga ditemukan.
Perhatian: Di Struts2, ekspresi OGNL perlu digunakan dengan tag Struts. Misalnya: <s:nilai properti="nama"/>
Karena ValueStack adalah objek akar OGNL di Struts 2, jika pengguna perlu mengakses objek di tumpukan nilai, halaman JSP dapat langsung mengakses properti objek di ValueStack melalui ekspresi EL berikut:
${foo} //Dapatkan atribut foo dari suatu objek di tumpukan nilai
Jika Anda mengakses objek dalam Konteks lain, karena objek tersebut bukan objek root, Anda perlu menambahkan awalan # saat mengakses.
objek aplikasi: digunakan untuk mengakses ServletContext, seperti #application.userName atau #application['userName'], yang setara dengan memanggil getAttribute("username") dari ServletContext.
objek sesi: digunakan untuk mengakses HttpSession, seperti #session.userName atau #session['userName'], yang setara dengan memanggil session.getAttribute("userName").
objek permintaan: Peta yang digunakan untuk mengakses atribut HttpServletRequest, seperti #request.userName atau #request['userName'], yang setara dengan memanggil request.getAttribute("userName").
objek parameter: digunakan untuk mengakses parameter permintaan HTTP, seperti #parameters.userName atau #parameters['userName'], yang setara dengan memanggil request.getParameter("username").
objek attr: digunakan untuk mengakses atributnya dalam urutan halaman->permintaan->sesi->aplikasi.
8. Mengapa Anda bisa menggunakan ekspresi EL untuk mengakses properti objek di valueStack?
Alasannya adalah Struts2 merangkum HttpServletRequest lebih lanjut. Kode yang disederhanakan adalah sebagai berikut:
kelas publik StrutsRequestWrapper memperluas HttpServletRequestWrapper {
public StrutsRequestWrapper(permintaan HttpServletRequest) {
super(persyaratan);
}
getAttribute Objek publik(String s) {
...
ActionContext ctx = ActionContext.getContext();
Atribut objek = super.getAttribute(s);//Pertama, dapatkan nilai atribut dari cakupan permintaan
jika (ctx != nol) {
if (atribut == null) {//Jika nilai atribut tidak ditemukan dari rentang permintaan, temukan nilai atribut objek dari ValueStack
...
Tumpukan ValueStack = ctx.getValueStack();
atribut = stack.findValue(s);
...
}
}
atribut kembali;
}
}
9. Buat objek kumpulan Daftar/Peta menggunakan ekspresi OGNL
Jika Anda memerlukan elemen koleksi (seperti objek Daftar atau objek Peta), Anda bisa menggunakan ekspresi terkait koleksi di OGNL.
Gunakan kode berikut untuk langsung menghasilkan objek Daftar:
<s:set name="list" value="{'zhangming','xiaoi','liming'}" />
<s:nilai iterator="#daftar" id="n">
<s:nilai properti="n"/><br>
</s:iterator>
Hasilkan objek Peta:
<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />
<s:nilai iterator="#foobar" >
<s:nilai properti="kunci"/>=<s:nilai properti="nilai"/><br>
</s:iterator>
Tag Set digunakan untuk menempatkan nilai ke dalam rentang tertentu.
Cakupan: Menentukan cakupan di mana variabel ditempatkan. Atribut ini dapat menerima aplikasi, sesi, permintaan, halaman, atau tindakan. Jika atribut ini tidak disetel, atribut ini akan ditempatkan di Konteks OGNL secara default.
value: Nilai yang ditetapkan ke variabel. Jika atribut ini tidak disetel, nilai di bagian atas tumpukan ValueStack akan ditetapkan ke variabel.