mhaller
30.06.2005, 11:18
Moin,
ich möchte einen Wizard schreiben, mit Struts. Ich kenn mich im J2EE Umfeld nicht sonderlich gut aus, und JSP, Struts & Co. sind mir relativ neu.
Ziel:
- Anwender wählt aus einer Radiobutton-Liste eine "Vorlagendatei" aus.
- Mit einem Klick auf "Weiter" soll er nun zu einem Formular gelangen, welches auf der Vorlagendatei basiert. Dort stehen key=value Paare drin, die ausgefüllt werden müssen, damit die Vorlagendatei bestückt werden kann.
- Mit einem Klick auf "Fertig" werden nun die vom Anwender eingegebenen Werte in die Vorlagendatei geschrieben.
Bisher:
- ich habe in der struts-config.xml eine form-bean "vorlagenBean" angelegt. Die dazugehörige Klasse "meinpackage.VorlagenBean" enthält zwei Maps (templates, replacements) und einen String, der die Auswahl der Vorlagendatei speichern soll.
- ich habe eine Action angelegt, die ich imt "<html:form action="/neueVorlage"> aufrufen kann. Dort ist als als Bean das o.g. vorlagenBean zugewiesen (name="vorlagenBean") und scope="session"
- Meine Action wird auch brav ausgeführt. Ich bekomme von Struts bereits die ActionForm übergeben und caste diese in meine eigene meinpackage.VorlagenBean mit dem Namen "bean". Die Action prüft, ob das Bean gefüllt ist, und je nachdem forwarded es dann zu einer jsp Seite weiter, die als View dient: return mapping.findForward("showTemplates.jsp"); Davor speichere ich aber das bean nochmals mit request.getSession().setAttribute("bean",bean);
- in meiner showTemplates.jsp hole ich mir die (Hash)-Map und zeige Sie als Liste an:
<html:form action="/neueVorlage">
<%
VorlagenBean bean = (VorlagenBean) session.getAttribute("bean");
Map map = bean.getTemplates();
for(Iterator iter = map.keySet().iterator();iter.hasNext();) {
String strKey = (String) iter.next();
String strLabel = (String) map.get(strKey);
%>
<input type="radio" key="selectedTemplateKey" value="<%=strKey%>"><%=strLabel%></input>
<%
}
%>
<html:submit />
</html:form>
Meine Fragen:
1) Warum muss ich die VorlagenBean in der struts-config definieren, und dann doch wieder mit session.getAttribute("bean") aus der Session holen? Ist doch doppelt gemoppelt. Irgendetwas mache ich also falsch, nur weiss ich nicht was.
2) Auf der zweiten Seite soll dann, in Abhängigkeit der ausgewählten Vorlagendatei, eine Tabelle angezeigt werden, in der der Anwender zu jedem Key einen Wert eingeben kann. Ich habe es bereits geschafft, dass diese zwar angezeigt wird, jedoch habe ich keine (funktionierende) Möglichkeit gefunden, alle Werte wieder "zurück" zu schreiben. Also jsp->Servlet hat nicht richtig funktioniert.
3) Die Unterscheidung der Attribute von Struts-Tags und JSTL-Tags macht mir Problem. Wenn mir das mal jemand erklären könnte, was z.B. beim <logic:iterate> Tag die einzelnen Attribute sind, und welche Namen ich da eintragen muss, wäre ich sehr dankbar. (name, property, value, id etc... da scheint es keine durchgängige Logik zu geben. Einmal steht irgendwo dass unter property immer die Bean-Name zu stehen hat, so wie er in der struts-config.xml definiert ist, andererseits wird dann der property-Wert als Feldname für das Formularfeld benutzt -> Bahnhof)
ich möchte einen Wizard schreiben, mit Struts. Ich kenn mich im J2EE Umfeld nicht sonderlich gut aus, und JSP, Struts & Co. sind mir relativ neu.
Ziel:
- Anwender wählt aus einer Radiobutton-Liste eine "Vorlagendatei" aus.
- Mit einem Klick auf "Weiter" soll er nun zu einem Formular gelangen, welches auf der Vorlagendatei basiert. Dort stehen key=value Paare drin, die ausgefüllt werden müssen, damit die Vorlagendatei bestückt werden kann.
- Mit einem Klick auf "Fertig" werden nun die vom Anwender eingegebenen Werte in die Vorlagendatei geschrieben.
Bisher:
- ich habe in der struts-config.xml eine form-bean "vorlagenBean" angelegt. Die dazugehörige Klasse "meinpackage.VorlagenBean" enthält zwei Maps (templates, replacements) und einen String, der die Auswahl der Vorlagendatei speichern soll.
- ich habe eine Action angelegt, die ich imt "<html:form action="/neueVorlage"> aufrufen kann. Dort ist als als Bean das o.g. vorlagenBean zugewiesen (name="vorlagenBean") und scope="session"
- Meine Action wird auch brav ausgeführt. Ich bekomme von Struts bereits die ActionForm übergeben und caste diese in meine eigene meinpackage.VorlagenBean mit dem Namen "bean". Die Action prüft, ob das Bean gefüllt ist, und je nachdem forwarded es dann zu einer jsp Seite weiter, die als View dient: return mapping.findForward("showTemplates.jsp"); Davor speichere ich aber das bean nochmals mit request.getSession().setAttribute("bean",bean);
- in meiner showTemplates.jsp hole ich mir die (Hash)-Map und zeige Sie als Liste an:
<html:form action="/neueVorlage">
<%
VorlagenBean bean = (VorlagenBean) session.getAttribute("bean");
Map map = bean.getTemplates();
for(Iterator iter = map.keySet().iterator();iter.hasNext();) {
String strKey = (String) iter.next();
String strLabel = (String) map.get(strKey);
%>
<input type="radio" key="selectedTemplateKey" value="<%=strKey%>"><%=strLabel%></input>
<%
}
%>
<html:submit />
</html:form>
Meine Fragen:
1) Warum muss ich die VorlagenBean in der struts-config definieren, und dann doch wieder mit session.getAttribute("bean") aus der Session holen? Ist doch doppelt gemoppelt. Irgendetwas mache ich also falsch, nur weiss ich nicht was.
2) Auf der zweiten Seite soll dann, in Abhängigkeit der ausgewählten Vorlagendatei, eine Tabelle angezeigt werden, in der der Anwender zu jedem Key einen Wert eingeben kann. Ich habe es bereits geschafft, dass diese zwar angezeigt wird, jedoch habe ich keine (funktionierende) Möglichkeit gefunden, alle Werte wieder "zurück" zu schreiben. Also jsp->Servlet hat nicht richtig funktioniert.
3) Die Unterscheidung der Attribute von Struts-Tags und JSTL-Tags macht mir Problem. Wenn mir das mal jemand erklären könnte, was z.B. beim <logic:iterate> Tag die einzelnen Attribute sind, und welche Namen ich da eintragen muss, wäre ich sehr dankbar. (name, property, value, id etc... da scheint es keine durchgängige Logik zu geben. Einmal steht irgendwo dass unter property immer die Bean-Name zu stehen hat, so wie er in der struts-config.xml definiert ist, andererseits wird dann der property-Wert als Feldname für das Formularfeld benutzt -> Bahnhof)