Saya telah belajar SSH baru -baru ini, dan saya belum mengerti perbedaan antara $,%,%, dan#. Saya telah melakukan beberapa latihan kecil dan secara bertahap sedikit memahami. Saya akan merekam apa yang telah saya pelajari.
Entitas berikut ada:
orang kelas publik {private int id; nama string pribadi; publik int getId () {return id; } orang publik (int id, nama string) {super (); this.id = id; Name = name; } orang publik () {super (); } public void setid (int id) {this.id = id; } public string getName () {return name; } public void setName (string name) {name = name; }} Dalam aksi Struts2, kode berikut ditulis:
@Override Public String Execute () melempar Exception {// Application Person P = Orang Baru (1, "Zhangsan"); ActionContext.getContext (). GetApplication (). Put ("orang", p); // Sesi Orang P1 = Orang Baru (3, "Wangwu"); ActionContext.getContext (). GetSession (). Put ("orang", p1); // Minta Orang P2 = Orang Baru (2, "Lisi"); ActionContext.getContext (). Put ("orang", p2); // servletcontext orang p3 = orang baru (5, "xiaoming"); ActionContext.getContext (). GetContextMap (). Put ("orang", p3); Orang P4 = orang baru (3, "wangwu"); ActionContext.getContext (). GetValueStack (). Push (p4); mengembalikan "kesuksesan"; } Simpan objek orang di aplikasi, sesi, permintaan, servletContext, valueStack, masing -masing. Kemudian di JSP kita bisa mendapatkannya dengan cara berikut:
orang: <input type = "text" name = "name" value = "$ {person}" /> <br /> id: <input type = "text" name = "name" value = "$ {person.id}" /> <br /> name: <input type = "name =" name "value =" $ {orang. Informasi orang yang diperoleh dengan kode di atas adalah xiaoming, yaitu informasi yang disimpan di ActionContext.getContext (). GetContextMap (). Dengan menanyakan penggunaan $, ditemukan bahwa ada cara untuk mendapatkan objek $, yaitu,
ActionContext.getContext (). GetContextMap ()> actionContext.getContext ()> actionContext.getContext (). GetSession ()> actionContext.getContext (). GetApplication (). Untuk objek dengan nama yang sama ada dalam lingkup yang berbeda (lingkup), metode pencarian $ akan dilakukan sesuai dengan langkah -langkah di atas. Jika ditemukan, itu akan menjadi output. Jika tidak ditemukan, itu akan terus mencari di level sebelumnya. Ketika bagian atas tidak ada, itu akan mengeluarkan nol.
Kemudian penggunaan $ adalah: $ {scope.object.attribute}
Nilai atribut ruang lingkup adalah permintaan, sesi, aplikasi. Ketika tidak ditulis secara default, Anda akan mencari sesuai dengan skema di atas. Jika Anda menemukannya, Anda akan mengeluarkan nilai atribut yang relevan.
Di tag struts, simpan:
<S: Nilai properti = "#application.person"/>
Dapat dilihat bahwa nomor # digunakan saat ini. Saya pribadi berpikir bahwa penggunaan # dan $ sebenarnya sama. Selama Anda memuat objek, Anda perlu output ke peta (servletContext, permintaan, sesi dan aplikasi) dalam rentang yang berbeda, saat menampilkannya di tampilan, menggunakan <s: value properti = "#scope.object.attribute"> persis sama dengan $ pemahaman. Tetapi saat Anda menggunakan tag struts, misalnya:
<S: TextField Name = "Person.Name"> </s: TextField>
Itu bisa dipahami sepenuhnya sebagai
<input type = "text" name = "persom.name" id = "person.name" value = "<s: value properti ="#person.name " /" />
Artinya, tag struts telah dienkapsulasi untuk kita dalam teks html <s: nilai properti = "#target.name"/>, yang dapat menyimpan banyak kode.
Demikian pula, penggunaan # adalah: <s: nilai properti = " # scope.object.attribute" />
Tentu saja, Anda dapat menggunakan tag yang ditentukan oleh Struts2 untuk menyimpan kerumitan menulis terlalu banyak kode duplikat. Faktanya, # memiliki kegunaan lain, seperti membangun objek seperti peta, tetapi saya pribadi berpikir bahwa era penulisan terlalu banyak kode dalam pandangan telah berlalu, dan penggunaan ini tidak memiliki arti. Selain itu, kali ini saya hanya menulis proses menampilkannya dalam tampilan, jadi saya tidak akan membicarakannya di tempat lain.
Akhirnya, mari kita bicara tentang penggunaan %. Sederhananya, %{} adalah ekspresi perhitungan string. Misalnya, ada tautan tertentu dalam tampilan, yang umumnya memiliki fungsi dasar seperti CRUD. Untuk fungsi Tambah dan Perbarui, dapat diselesaikan pada halaman yang sama. Perbedaannya adalah bahwa alamat yang kami kirimkan berbeda. Misalnya, mungkin seperti ini: untuk metode tambah, alamatnya adalah user_add.action, dan untuk metode udpate, alamatnya adalah user_update.action, jadi dalam bentuk, % dapat digunakan untuk penilaian:
<S: Form Action = "USER _%{id == 0? 'Tambahkan': 'UPDATE'}"> </form> Haha, jadi dua halaman sebelumnya sekarang dapat diselesaikan dengan satu halaman.
Demikian pula, % lebih sering digunakan dengan label penilaian seperti IF dan Ifelse dalam Struts. Lagi pula, apakah itu perbandingan? . . .
<S: if test = "%{false}"> <div> tidak akan dieksekusi </div> </s: if> <s: elseif test = "%{true}"> <div> akan dieksekusi </div> </s: elseif> <s: else> <ver> tidak akan dieksekusi </div> </s: elseif> <s else> <ver> tidak akan dieksekusi </div> </s: else> Akhirnya, mari kita bicara tentang pendekatan yang berguna dari % ini, dengan asumsi ada daftar yang menunjukkan semua nilai kelulusan siswa (mis., Nilai yang gagal tidak akan ditampilkan di atas), jika % yang digunakan akan sangat sederhana. Tidak, letakkan kodenya terlebih dahulu:
Kelas Publik Stduent mengimplementasikan java.io.serializable {private static final long serialVersionuid = -691038814755396419l; Private Int ID; nama string pribadi; skor int pribadi; subjek string pribadi; publik int getId () {return id; } public void setid (int id) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } public int getScore () {skor return; } public void setscore (skor int) {this.score = skor; } string publik getSubject () {return subjek; } public void setSubject (string subjek) {this.subject = subjek; } / ** * Di sini kita menilai apakah skor lulus ujian * @param socre * @return * / public boolean isPast (int socre) {return getscore ()> 60; }} Jadi, sekarang cari nilai siswa di database dan masukkan ke dalam daftar untuk penyimpanan sementara. Pada halaman JSP, kita dapat menggunakan kode berikut untuk mengontrol apakah output sistem grade lulus:
<S: Iterator value = "#alluser"> <!- Tentukan apakah akan melewati garis, jika Anda melewati garis, itu akan menjadi output, jika tidak Anda akan menyerah! --> <s:if test="#session.user.isPast(score)"> name: <s:textfield name="name"></s:textfield> score: <s:textfield name="score"></s:textfield>/ subject:<s:textfield name="subject"></s:textfield> </s:if> </s:iterator>
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!