Struts 2 validate(), result "input" und properties

joschi77

Grünschnabel
Hallo Leute,

ich bin gerade beim Einstieg in Stuts 2 und habe mit diversen Problemen zu tun. Ich habe gesehen, dass es hier Leute gibt die sich wohl damit schon etwas länger beschäftigen und mir evtl. helfen können.

Nun zu meinem Problem, bzw. Problemen :).

erstes Problem:

Ich habe mich so ein wenig an die Beispiele von Struts2/ Example gehalten.
- Ich habe meine JSP geschieben, erstmal recht einfach.

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Search</title>
</head>
<body>
<s:form action="Search">
<s:textfield label="upper Range" key="upperRange"/>
<s:textfield label="lower Range" key="lowerRange"/>
<s:submit/>

</s:form>
</body>
</html>

- dann habe ich die Action geschrieben

public class Search extends ActionSupport {
private String upperRange, lowerRange;
setter&getter...

public String execute() throws Exception{
return SUCCESS;
}

public void validate(){
if( getLowerRange() == null || getLowerRange().isEmpty() ){
addFieldError("lowerRange", getText("lowerRangeInfo"));
}
if( getUpperRange()== null || getUpperRange().isEmpty() ){
addFieldError("upperRange", getText("upperRangeInfo"));
}
}
}

- und die struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<constant name="struts.configuratio.xml.reload" value = "true" />
<constant name="struts.enable.DynamicMethodInvocation" value = "false" />
<constant name="struts.url.includeParams" value = "none" />
<constant name="struts.i18n.encoding" value = "ISO-8859-1" />
<constant name="struts.devMode" value = "true" />

<!-- Configuration for the default package.-->
<!-- extends erweitert das neue packet und um das Struts Standard-Paket -->
<include file="struts-default.xml"/>
<include file="struts-plugin.xml"/>
<package name="meinProjekt" extends="struts-default">

<!-- Add your actions here -->

<action name="Search" class="com.t_systems.fiscmdb.presentation.actions.Search">
<result>Success.jsp </result>
<result name="input">Search.jsp </result>
</action>
</package>
</struts>

so und nun zum Problem
wenn ich die JSP aufrufe und ein Feld nicht eingebe, dann dann führt der die validate aus, aber im Eingabeformular ist der Wert den ich eingegeben habe nicht mehr drin, sondern es beide Felder leer.
Wenn ich das StrutsBlank ausprobiere steht da aber der Wert dann immer noch im Feld und ich muss nur das vergessene Feld neu füllen.
Warum ist das so

zweites Problem:

ich verwende eine Propertiesdatei für die Meldungen, nur werden diese nicht angesprochen und laut meiner Recherche sollte die Datei z.B. wie die Action Search und dann Endung properties heißen.

So, ich hoffe ich hab alles halbwegs verständlich erklärt.

Ich danke schonmal für die Mühen.
Gruß joschi
 
Hallo Leute,

also einen Teil des Rätsels konnte ich schon mal lösen, kleiner, aber gemeiner Fehler.

Die Properties-Datei sollte sich in dem Klassenverzeichnis befinden, von der Klasse, von der sie verwendet wird.

Das sah bei mir auch alles soweit ganz gut aus, aber halt nur in Eclipse, denn nach dem Deployen lag die im Apache Tomcat wo anders und der dort wurde sie einfach nicht gefunden. Nun liegt sie im richtigen Verzeichnis und siehe da, es geht.

Also, was habe ich gelernt? Man darf nicht einfach davon ausgehen, dass es ist wie es sein sollte :).

Vielleicht hat der Eine oder Andere noch eine Idee wegen der anderen Geschichte.

Gruß Joschi
 
Hallo Gemeinde,

ich habe die Lösung des Problems. Nur die Ursachen habe ich nicht wirklich gefunden.

Vermutung:
Also, ich habe mein Projekt mit Elipse als Tomcatprojekt erstellt und habe das Sysdeo plugin verwendet um ein warfile zu builden.
Da ich mich jetzt aber für Ant zum builden entschieden habe, habe ich Einstellungen Eclipse zurückgesetzt. Damit fingen die Probleme meines Erachtens an.

Lösung:
Nach taglanger und Prüfung des Quellcodes habe ich mich entschlossen ein neues Projekt anzulegen. Diesmal als normales Javaprojekt, habe dann alle Klassendateien hineincopiert und die anderen Dateien noch einmal neu geschrieben.

Und nun funktioniert es auch.

Doch eine logische Erklärung für die Fehler habe ich nicht entdecken können, da sich der Quellcode mit dem anderen Projekt vollständig deckt.

freundliche Grüße
Jörg
 
Zurück