Ha jol latom a doksit, a html:submit-nak nincs name
parametere csak
value. Vagy valami bedrotozott neven megy? (Gondolom ez a forrasbol
derulne ki :))
Mert valahogy meg kene csinalni hogy ket gomb legyen a formhoz.
Azt hogyan lehet megcsinalni?
Ez egy jo kerdes. A baratod a DispatchAction es a LookupDispatchAction
osztaly, melyek mindketten az org.apache.struts.action.Action alosztalyai.
Ez utobbi, amit eddig is hasznaltal, amikor akcio osztalyt irtal.
A DispatchAction az ActionMapping (mindjart magyarazom...) "parameter"
nevu tulajdonsaganak erteke alapjan hivja meg a megfelelo metodust. Azaz,
nem a szokasos execute metodus hivodik meg, ami a sima Action osztaly
eseten.
Ime az az ActionMapping, amit a kis hazi referenciamegoldasaban hasznalok:
<action
path="/khf1_main_action"
type="hu.targosoft.vima9000.khf1.action.Main_action"
name="main_form"
scope="request"
validate="true"
parameter="action"
input="/main.jsp">
<forward
name="success"
path="/result.jsp"/>
<forward
name="failure"
path="/main.jsp"/>
</action>
Ezt ugy olvassuk ki, hogy a khf1_main_action akcio, a
hu.targosoft.vima9000.khf1.action.Main_action osztaly egy peldanyahoz fog
fordulni. Elotte felpopulal egy babot, amiben tarolja a form mezoinek
erteket, sot, meghivja annak validalasi metodusat. Ha ez nem sikeres,
akkor rogton visszamegyunk a main.jsp-hez.
Latszik, hogy az ActionMapping-nek ott van az a bizonyos "parameter"
tulajdonsaga. Ezt a megfelelo JSP lap <html:submit> eleme allitja be, mint
keresi parameter (a form tobbi mezojehez hasonloan):
...
<html:submit property="action">
...
</html:submit>
...
Szoval az igaz, hogy nincsen a <html:submit>-nak name parametere, de
"property"-je van, ez a Struts-os megfelelo. Ezzel megadhatjuk azt a
keresi szintu nevet, aminek erteke a value-val megadott (vagy a
<html:submit> torzseben szereplo) ertek lesz.
Azaz, DispatchAction eseten, ha a gomb neve "vissza", akkor kell lennie egy
public ActionForward vissza(...) {} metodusnak.
Na, itt latszik, hogy ez nem a legszebb megoldas, mert nehogymar a gomb
neve hatarozza meg a metodus nevet. Ennek ellenere nincsen jarhatobb ut,
talan egy picivel (azert joval...) szebb a LookupDispatchAction, mely
majdnem ugyanaz, mint a DispatchAction, csak:
- implementalja a getKeyMethodMap() metodust, pl igy:
protected Map getKeyMethodMap() {
Map map = new HashMap();
map.put("main.lkkt", "calculate_lkkt");
map.put("main.lnko", "calculate_lnko");
return map;
}
- ilyenkor csak public ActionForward calculate_lkkt(...) es public
ActionForward calculate_lnko(...) metodusokat kell implementalnunk.
Ados vagyok meg azzal, hogy mi az ize az a "main.lkkt" es a
"main.lnko".
Errol sosem beszeltem meg, de a Struts lehetoseget ad arra, hogy peldaul
kulon eroforrasfile-okban taroljuk a GUI-nkon megjeleno kulonbozo
uzeneteket. Egy ilyen file-ban peldaul az alabbi lehet:
main.lkkt=legkisebb közös többszörös
main.lnko=legnagyobb közös osztó
Es ekkor a megfelelo JSP kod:
...
<html:submit property="action">
<bean:message key="main.lkkt"/>
</html:submit>
...
Tehat tovabbra is a gomb neve alapjan fog tortenni a metoduskivalasztas,
de kozvetett modon. Ha az eroforrasfile-ban megvaltoztatjuk a gomb
feliratat, attol meg a programunk tovabbra is mukodik, hiszen a
getKeyMethodMap() is mar a megvaltozott eroforrasfile-t hasznalja arra,
hogy megnezze mi volt az ActioMapping "parameter" tulajdonsaganak
ertekekent megadott literal.
Remelem tudtam segiteni,
G