2009-06-02 20 views
6

Struts'ta giriş sayfası yapmaya çalışıyorum. Buradaki amaç, kullanıcının var olup olmadığını doğrulamaktır, ve sonra bir hata varsa, kırmızı ile (giriş veya herhangi bir form sayfası doğrulaması) hatalar içeren giriş sayfasına geri dönün.<html:errors> struts öğretici veya örnek

Birisinin Struts'taki hata yönetimi öğreticisini bildiğini bilmek isterim. Benim sorunu çözmek düşünüyorum

<html:errors> 

etiketin bir öğretici (veya örneğin) için özel olarak arıyorum.

cevap

10

İşte özet bir özet. Bir ActionForm sınıf var, MyForm ki:

<form-bean name="myForm" type="myapp.forms.MyForm"/> 

Bir Action sınıf var, MyAction ki:

<action path="/insert" type="myapp.actions.MyAction" name="myForm" 
    input="/insert.jsp" validate="true" /> 
    <forward name="success" path="/insertDone.jsp"/> 
</action> 

"adı" eylem form fasulye "name" anlamına gelir. otomatik çağrılır validate() yöntemi tanımlamalıdır validate="true" sizin ActionForm sınıf MyForm Çünkü:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { 
    ActionErrors errors = new ActionErrors(); 
    if ((username==null) || (username.length() < 1)) 
     errors.add("username", new ActionError("error.username.required")); 
    return errors; 
} 

boş bir ActionErrors nesne dönerse, Struts sizin MyAction.execute aramaya devam ediyor(). Aksi takdirde, Struts /insert.jsp dosyasını görüntüler (çünkü girdi = parm vermişsinizdir) ve hatalarınızı ActionErrors'tan görüntülemek için html.errors etiketini genişletir.

+0

Teşekkürler! Çalışma saatlerinden sonra formumu doğrulayabilirdim. Sonunda, ben yerine eylemde fasulye doğrulamak ve validation.xml (minlenght, gerekli, vb) ve veritabanı doğrulama (kullanıcı var, şifre doğru ...) kullanılır. Değiştirmem gereken tek şey, ".add (String, ActionError)" öğesinin ActionErrors kullanımıdır, çünkü kullanımdan kaldırılmıştır (Struts 1.2.x) ve ".add (String, ActionMessage)" ifadesi esas olarak aynıdır. Yine, cevaplarınız için çok teşekkür ederim! – Tere

+0

@Mark Lutton: form başka bir Eylemden başlayarak oluşturulduysa (örneğin, bazı radyo düğmelerinin etiketleri/değerleri bir DB'den alındı ​​ve istekte bulunur), radyo düğmeleri hatayla birlikte nasıl tekrar gösterilebilir? bir radyo düğmesinin seçilmesi gerekiyorsa)? Formu gönderdiğimde bunları görüntülemeyi başaramıyorum (yalnızca hata yazdırılıyor). – Sefran2

14

İşte biri: //struts.apache.org/1.3.5/struts-taglib/apidocs/org/apache/struts/taglib/html/package-summary.html#package_description

İşte ben o Struts 2 için değişip değişmediğini bilmiyorum Struts 1. varsayarak m

Maalesef ileti kaynakları dosyasına bir errors.header ve errors.footer koyabilirsiniz

:

errors.header=<h3><font color="red">Errors:</font></h3><ul> 
errors.footer=</ul> 

başlık ve altbilgi yalnızca ActionErrors nesnesinde herhangi bir hata varsa görüntülenir. dönmeden önce Sonra

ActionErrors errors = new ActionErrors(); 
if (badInput) { 
    errors.add(ActionErrors.GLOBAL_ERROR, 
    new ActionError("error.bad.input", badString); // key in messages resource file 
            // badString will replace {0} in message 
} 

: senin Eylem sınıfta

Bunu yapmak mesajlarınız kaynak dosyasında

saveErrors(request, errors); 

: Artık

error.bad.input=<li>Bad input: '{0}' is invalid.</li> 

<html:errors/> etiketi işlendiğinde , dönüşecek:

<h3><font color="red">Errors:</font></h3><ul> 
<li>Bad input: 'xxyyzzz' is invalid.<li> 
</ul> 
+0

Bu kesinlikle renkli bir cevaptır, değil mi? Biçimlendirmenin burada nasıl işlediğini anlamadım. –

+0

Cevabınız için çok teşekkür ederim! Hala doğrulamaya çalışıyorum (sugestiongs'ları izleyerek, gerçekten çok iyiler! Buna benzer bir şeye ihtiyacım vardı, hepsi aynı yerde açıklandı) Ne zaman çalıştığını size bildireceğim! ;) – Tere

+0

Bunun en iyi açıklaması Sue Spielman, ISBN 1-55860-862-1 tarafından "The Struts Framework: Java Programcıları için Pratik Kılavuz" kitabında yer almaktadır. Bölüm 5. Adım adım gider. –