Pengembangan aksi diselesaikan dengan mewarisi kelas Ujusan. Kelas Actionsupport tidak hanya hanya mengimplementasikan antarmuka tindakan, tetapi juga menambahkan dukungan untuk verifikasi dan lokalisasi. Tindakan khusus dalam pengembangan nyata perlu mewarisi kelas ini. Tambahkan Fungsi Verifikasi Formulir ke Login Pengguna
Peran Kelas Actionsupport:
Struts2 tidak memerlukan kelas aksi yang kami rancang untuk mewarisi setiap struts base class atau antarmuka struts, tetapi untuk memfasilitasi implementasi tindakan kami sendiri, kami akan mewarisi com.opensymphony.xwork2.actionsupport kelas dalam kebanyakan kasus, dan mengesampingkan string publik () melempar metode pengecualian di kelas ini. Karena ada banyak alasan praktis di kelas ini, banyak metode default disediakan, termasuk metode informasi internasional, metode default untuk memproses permintaan pengguna, dll., Yang dapat sangat menyederhanakan pengembangan acion. Di Struts2, tindakan biasanya digunakan langsung untuk merangkum parameter permintaan HTTP. Oleh karena itu, kelas tindakan juga harus menyertakan atribut yang sesuai dengan parameter permintaan, dan menyediakan metode pengambil dan setter yang sesuai untuk atribut.
Jadi apa perbedaan antara antarmuka aksi dan kelas dukungan tindakan?
Antarmuka tindakan memiliki:
Public Static Final String Success = "Success"; Public Static Final String None = "None"; Public Static Final String error = "error"; Public Static Final String Login = "Login"; Public String Execute () melempar pengecualian;
Anda dapat melihat bahwa ada lima konstanta statis dan mengeksekusi () dengan string tipe pengembalian
Atas dasar mengimplementasikan antarmuka tindakan, kelas alat Actionsupport juga mendefinisikan metode validasi (). Jika metode ini diganti, itu akan dieksekusi sebelum metode Execute (). Jika verifikasi gagal, itu akan ditransfer ke input. Atribut input harus dikonfigurasi saat mengonfigurasi tindakan.
Selain itu, ActionUpport juga menyediakan metode getText (string kunci) dan mewujudkan internasionalisasi, yang memperoleh informasi internasionalisasi dari file sumber daya.
Dengan cara ini, saat menyesuaikan tag, Anda dapat mendefinisikan variabel sebagai objek yang mendukung tindakan baru untuk mencapai internasionalisasi.
Kelas Actionsupport memiliki (kode sumber):
Tindakan Public Class Respupport menerapkan tindakan, validasi yang divalidasi, ALMET, textProvider, localeprovider, serializable {static logger static log = loggerFactory.getLogger (ActionSupport.class); private final validationApupport validationAware = validationAwareSupport (); private TextProviderroverroverroverroverroverrover; validasi publicer; errorMessages) {validationAware.setActionErrors (errormessages);} koleksi publik <string> getActionErrors () {return validationAware.getActionErrors ();} public void setActionMessages (Collection> getActionS) {validationAware.setActionMessages (pesan);} koleksi publik <string> getActionS) {) {pesan);} public Collection <string> getActionS () {publicingsage (pesan);} public Collection <string> getActionS () {publicingsage (pesan); validationAware.getActionMessages();}@Deprecatedpublic Collection<String> getErrorMessages() {return getActionErrors();}@Deprecatedpublic Map<String, List<String>> getErrors() {return getFieldErrors();}public void setFieldErrors(Map<String, List<String>> errorMap) {validationAware.setFielderRors (errorMap);} peta publik <string, daftar <string>> getFielderRors () {return validationAware.getFielderRors ();} public locale getLocale () {actionContext ctx = actionContext.getContext (); if (ctx; ctx = ctx = ActionContext.getContext (); if (ctx; ctx = ctx = ActionContext.getContext (); if (ctx; ctx = ctx = actionContext.getContext (); if (ctx! {if (LOG.isDebugEnabled()) {LOG.debug("Action context not initialized");}return null;}}public boolean hasKey(String key) {return getTextProvider().hasKey(key);}public String getText(String aTextName) {return getTextProvider().getText(aTextName);}public String getText(String atextName, string defaultValue) {return getTextProvider (). getText (atextName, defaultValue);} public string getText (string atextName, string defaultValue, string obj) {return getTextProvider (). getText (atextName, defaultValue, obj), oBj) {Obj), oBj) {Obj) {Obj). {return getTextProvider (). getText (atextName, args);} public string getText (tombol string, string [] args) {return getTextProvider (). getText (key, args);} public string getText (string atextName, string defaultValue, list <?> {list '{{{{{{list?> {aRTEXTEXT (string). DefaultValue, args);} string publik getText (tombol string, string defaultValue, string [] args) {return getTextProvider (). getText (key, defaultValue, args);} public string (string key, string DefaultValue, list <? ARGS, VALUESTACK STRACK) (KUNCIRAFULEF) (DEFURAULE (LIST? ARGS, VALUESTACK) (VALUESTACK) PUBLIAUCE (DEFAULT (? args, stack);} string publik getText (tombol string, string defaultValue, string [] args, valueStack stack) {return getTextProvider (). getText (key, defaultValue, args, stack);} public string getFormatted (string kunci, string expr) {string, objek> Conversionrors = ActionContext.getContext (). GetConVersionErrors (); if (conversionerrors.containskey (expr)) {string [] vals = (string []) konversionerrors.get (expr); return vals [0];} else {final valueStack valueStack = actionContext.getContext (). valueStack.findValue (expr); return getText (key, arrays.aslist (val));}} sumber daya publik getTexts () {return getTextProvider (). getTexts ();} public ResourceBundle (string getTexts (string kelimpahan) {getTexts getTextsprover (string getTexts (string kelimpahan) {getTexts getText addactionError (string anerrorMessage) {validationAware.addactionError (anerrorMessage);} public void addactionMessage (string amessage) {validationAware.addactionMessage (amessage);} public addFielderror (string fieldname, string errormessage) {{{{{{{{string string) {{string fieldeMeNder (string) Input string () melempar Exception {return input;} public String dodefault () melempar Exception {return Success;} Public String Execute () melempar Exception {return Success;} public boolean hasactionErrors () {return validationAware.hasactioneRrors ();} public boolean heltacesage () {publicAchApices () {publicaCACES.HASACHAPES ();} public boolean heltacesage () {) {publicaCApes. hasErrors() {return validationAware.hasErrors();}public boolean hasFieldErrors() {return validationAware.hasFieldErrors();}public void clearFieldErrors() {validationAware.clearFieldErrors();}public void clearActionErrors() {validationAware.clearActionErrors();}public void clearMessages () {validationAware.clearmessages ();} public void cleareRrors () {validationAware.cleareRrors ();} public void cleareRrorSandMessages () {validationAware.clearerrorsandmessages ();} public void validate () {} @Overrorscublepmessages ();} public void validate () {} @OverridepubsAndMessages (); super.clone ();} public void jeda (hasil string) {} private textProvider getTextProvider () {if (textProvider == null) {textProviderFactory tpf = TextProviderFactory (); if (container! = null) {container.inject (tpf); ini);} return TextProvider;}@injectpublic void setContainer (wadah wadah) {this.container = wadah;} Anda dapat melihat bahwa ada banyak metode di dalamnya, tetapi kami jelas melihat bahwa ada metode yang kami kenal dengan baik, validasi (), dan verifikasi data. Melalui metode ini, kita dapat meminta saat masuk, nama pengguna dan kata sandi kosong, atau lainnya ...
Sekarang berikan contoh sederhana: Ketika nama pengguna dan kata sandi kosong, beri pelanggan prompt ramah.
Berikut ini adalah dua cara untuk menjelaskan fungsi verifikasi data dari Struts 2.
1. Verifikasi metode pengkodean
1) Tindakan harus diwarisi dari Actionsupport
2) Tulis metode public void validatexxx () untuk metode pemrosesan permintaan diperiksa, dan melakukan verifikasi data formulir di dalam metode.
3) Anda juga dapat menulis metode public void validate () untuk semua metode pemrosesan permintaan.
4) Dalam metode verifikasi, Anda dapat menambahkan pesan kesalahan verifikasi bidang melalui metode addFielderRor ().
5) Ketika verifikasi gagal, kerangka kerja Struts akan secara otomatis melompat ke halaman hasil dengan input nama. Di halaman Kegagalan Verifikasi, Anda dapat menggunakan <s: fielderror/> untuk menampilkan pesan kesalahan
6) Sederhana dan fleksibel. Tapi itu tidak terlalu dapat digunakan kembali
Tulis ulang metode validasi
1. Tindakan yang kami tulis secara umum mewarisi dan mendukung tindakan, dan tindakan yang mendukung tidak hanya mengimplementasikan antarmuka tindakan, tetapi juga mengimplementasikan antarmuka yang dapat divalidable, menyediakan fungsi verifikasi data. Tentukan metode validasi dalam antarmuka yang dapat divalidable, angkanya metode, jika kesalahan terjadi di bidang input bentuk verifikasi, tambahkan kesalahan ke bidang fielderror dari kelas ActionSupport, dan kemudian outputnya melalui ekspresi OGNL.
Berikut ini adalah antarmuka verifikasi login pengguna:
<body> <%-Informasi verifikasi output-%> <%-jika Anda ingin satu prompt <s: fielderror fieldname = "uname"/>-%> <%-<s: value properti = ""/>-%> <div style = "color: red"> <s: fielderror/> </div> <s: bentuk name = "Form1" name1 "name1" name1 "/"/"/" "/" "/" "" "" "" "" action="LoginValidateAction"><s:div>Please enter username:<s:textfield name="user.uname"></s:textfield></s:div><s:div>Please enter password: <s:password name="user.upwd" >/s:password></s:div><s:submit value="Login"></s:submit></s:form><%--debug -%> <S: Debug> </s: Debug> </body>
Setelah pengguna memasukkan data, kirimkan ke LoginValidateAction:
LoginValIdateAction kelas publik memperluas tindakan yang mendukung tindakan {pengguna pengguna publik; peta publik <string, objek> peta; // metode verifikasi akan bekerja pada semua tindakan @override public void validate () {if (user.getuname (). Panjang () == 0) {addFielderRor ("uname", "nama pengguna tidak dapat kosong!" if (user.getupwd (). length () == 0) {addFielderRor ("upwd", "kata sandi tidak bisa kosong!");} // metode untuk menangani string publik bisnis eksekusi () melempar pengecualian pengecualian {System.out.println(user.getUname());if(user.getUname().equals("admin")&&user.getUpwd().equals("admin")){//Let Struts2 inject map collection map.put("uname", user.getUname());//If the login is successful, return "success" return SUCCESS;}else{//Login failed, return input kesalahan; // Ini harus input}}/*** @return pengguna*/pengguna publik getUser () {return user;}/*** @param pengguna untuk mengatur*/public void setuser (pengguna pengguna) {this.user = user;} Kelas LoginValidateAction di atas mengesampingkan metode validasi, yang akan dieksekusi sebelum menjalankan metode ekskute. Jika setelah menjalankan metode ini, arsip kelas tindakan berisi kesalahan verifikasi data, permintaan akan diteruskan ke tampilan logis input.
Struts.xml dikonfigurasi sebagai berikut:
<!-Verifikasi Data-> <action name = "LoginValidateAction"> <!-Ketika hasilnya adalah "Sukses", lompat ke halaman Success.jsp-> <result name = "Success"> Success.jsp </hasilnya> <!-ketika hasilnya adalah "kesalahan", lompat ke halaman fail.jsp atau masih login.jsp-> <hasil hasil = " name = "Login"> Fail.jsp </RAEST> <RESURE NAME = "ERROR"> FAIL.jsp </RAEST> </action>
Efek pada klien:
Tetapi apakah Anda memperhatikan bahwa ketika kesalahan diminta, itu bukan efek yang kami inginkan.
Ini bukan yang kita inginkan, jadi bagaimana kita bisa mengubahnya? Bahkan, ini terutama menunjukkan gaya tema Struts2,
Mari kita lihat lagi:
Secara otomatis menambahkan gaya kepada kami. Struts2 menyediakan tiga tema, Ajax, Sederhana, XHTML. Itu default ke tema xhtml. Tentu saja, Anda dapat menulis salah satu tema Anda sendiri, yang kami sebut tema khusus. Masalah di atas dapat diselesaikan dengan mengaturnya
Ada dua cara untuk menyelesaikannya:
1. Metode sederhana (juga praktis, untuk semua tag Struts2), tambahkan baris kode berikutnya di struts.xml.
<name konstan = "struts.ui.theme" value = "Simple" />
Ini berarti bahwa semua halaman menggunakan tema sederhana. Pada saat ini, output halaman TI tidak menambahkan kode yang tidak perlu, seperti Tabel Tr TD, dll., Dan kami dapat mengedit gaya halaman seperti halaman pengeditan lainnya.
Mari kita lihat format prompt kesalahan
Kami dapat mengatur tag seperti ini:
<S: Nilai properti = "errors.uname [0]"/>
Komentari tag ini:
<Div style = "Color: Red"> <S: fielderror/> </div>
Tetapi ketika kita mengaturnya seperti ini, efek ini akan terjadi.
Efek ini sedikit seperti prompt ketika kita biasanya memasukkan kesalahan, dan ada nilai atribut lainnya, jadi kita tidak perlu mencantumkannya satu per satu.
Kerangka kerja verifikasi dengan struts2
Verifikasi Konfigurasi XML.
Mengeksekusi sebelum pengkodean.
1) Agar kelas tindakan diverifikasi, tulis file aturan verifikasi yang dinamai: Kelas tindakan validasi.xml di bawah paket yang sama.
2) Tambahkan aturan verifikasi ke file aturan verifikasi: Untuk nama perangkat verifikasi tertentu, silakan merujuk ke referensi Struts2 atau API Struts2.
A) Verifikasi Lapangan: Aturan untuk memverifikasi setiap bidang tipe non-custom di kelas tindakan.
<nama bidang = "Nama bidang yang akan diverifikasi"> <field-validator type = "periksa nama penguasa" pendek-sirkuit = "Apakah akan menjadi verifikasi jalur pendek (default adalah false)"> <param name = "Nama parameter yang akan digunakan oleh verifier"> </param> <pesage> Pesan prompt ketika verifikasi gagal </pesan> </validor> </param> <pesage> Pesan prompt ketika verifikasi gagal </pesan> </valid field-validor>
b) Verifikasi non-bidang: Gunakan ekspresi OGNL untuk verifikasi kombinatorial untuk bidang tertentu di kelas tindakan.
<validator type="fieldexpression"><param name="fieldName">pwd</param><param name="fieldName">pwd2</param><param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL expression--><message>Confirm that password and password input are inconsistent</message></validator>
C) Verifikasi Pengunjung: Ini terutama digunakan untuk memverifikasi bidang tipe khusus di kelas tindakan. (Untuk penggunaan mode yang digerakkan oleh model)
i) Gunakan aturan verifikasi pengunjung untuk bidang tipe kustom dalam file aturan verifikasi kelas tindakan.
<!-Gunakan verifikasi pengunjung untuk bidang khusus-> <field name = "user"> <field-validator type = "wajib" sirkuit pendek = "true"> <pesage> USSAGE diperlukan </pesage> <!-Prefix pesan-> </field-validator> <field-validator type = "pengunjung"> <! Tentukan nama konteks untuk verifikasi pengunjung ini-> <param name = "appendPrefix"> true </param> <!-apakah akan menambahkan awalan pesan kegagalan verifikasi-> <pesage> USSAGE </pesage> <!-Pesan Pesan-> </field-validator> </field>
ii) Tulis file aturan verifikasi untuk bidang pengunjung. Nama File adalah: Nama Jenis Bidang Pengunjung [-Visitor Nama Konteks Verifikasi] -validation.xml. Misalnya: Nama file dalam contoh ini adalah pengguna-usercontext-validation.xml
Catatan: File ini harus disimpan dalam paket tempat jenis bidang pengunjung berada.
iii) Tambahkan aturan verifikasi untuk bidang yang akan diverifikasi dalam file aturan verifikasi lapangan pengunjung.
Kami juga dapat melakukan verifikasi data dengan menambahkan file konfigurasi verifikasi tanpa menulis ulang metode validasi. File konfigurasi verifikasi ini melengkapi verifikasi bidang formulir dengan menggunakan perangkat verifikasi yang ada di Struts2. Di sini, ambil perangkat verifikasi yang diperlukan sebagai contoh. Perangkat verifikasi ini adalah perangkat verifikasi yang diperlukan yang menentukan bahwa bidang formulir tertentu harus dimasukkan.
Berikut ini adalah cara untuk menulis loginValidateAction-validation.xml dari file konfigurasi verifikasi ini:
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Validator Doctype Publik "-// Apache Struts // XWork Validator 1.0.2 // en" "http://struts.apache.org/dtds/xwork-validator-" name-validator- " type = "wajib"> <pesage> nama pengguna tidak dapat kosong </pesage> </field-validator> </field> <field name = "upwd"> <field-validator type = "wajib diperlukan"> <pesage> Passage tidak dapat kosong </pesan> </field-validator> <field-validator type name = "MinLength"> 6 </param> <pesage> Panjang bagian harus antara $ {MinLength}-$ {maxlength} bits </pesage> </field-validator> </field> </ validators> Catatan: File konfigurasi verifikasi ini harus mematuhi dua aturan berikut:
1. Format nasib file harus berupa nama kelas tindakan -validation.xml. Misalnya, dalam contoh ini, nama file adalah: LoginValidateAction-Validation.xml
2. File harus berada di jalur yang sama dengan file kelas kelas tindakan. Dalam contoh ini, file ada di
Kode kelas LoginValidateAction adalah sama:
LoginValIdateAction kelas publik memperluas tindakan yang mendukung tindakan {pengguna pengguna publik; peta publik <string, objek> peta; // metode verifikasi akan bekerja pada semua tindakan @override public void validate () {if (user.getuname (). Panjang () == 0) {addFielderRor ("uname", "nama pengguna tidak dapat kosong!" if (user.getupwd (). length () == 0) {addFielderRor ("upwd", "kata sandi tidak bisa kosong!");} // metode untuk menangani string publik bisnis eksekusi () melempar pengecualian pengecualian {System.out.println(user.getUname());if(user.getUname().equals("admin")&&user.getUpwd().equals("admin")){//Let Struts2 inject map collection map.put("uname", user.getUname());//If the login is successful, return "success" return SUCCESS;}else{//Login failed, return input kesalahan; // Ini harus input}}/*** @return pengguna*/pengguna publik getUser () {return user;}/*** @param pengguna untuk mengatur*/public void setuser (pengguna pengguna) {this.user = user;}Di atas adalah fungsi verifikasi data Struts 2 dan solusi untuk masalah verifikasi yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!