Es stellte sich heraus, dass Fehler (Feld und Aktion sind nicht über eine Kette gehalten.
Nach beweist dies (unterstellt struts2-conventions-plugin-VERSION):
Aktion foo immer kettet an Aktionsleiste (also wir auf ly brauchen
Aktion eine Ansicht für Aktionsleiste) foo
package com.quaternion.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Result;
/** #1 SOMETHING WILL BE ADDED HERE TO FIX THE ISSUE**/
@Result(name="input", type="chain", location="bar")
public class Foo extends ActionSupport{
private String name;
@Override
public void validate(){
super.addActionError("Just an action error");
super.addFieldError("name", "Name is all ways wrong... for no good reason.");
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
Aktionsleiste
package com.quaternion.action;
import com.opensymphony.xwork2.ActionSupport;
/** #2 SOMETHING WILL BE ADDED HERE TO FIX THE ISSUE**/
public class Bar extends ActionSupport{
}
Ansicht für Bar: /WEB-INF/content/bar.jsp
<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<h1>Action Bar</h1>
<s:actionerror/>
<s:fielderror name="name"/>
</body>
</html>
Testen des oben genannten sehen wir nichts in den Fehlern angezeigt.
Um das Problem zu beheben wir den Laden Abfangjäger verwenden: http://struts.apache.org/2.0.14/struts2-core/apidocs/org/apache/struts2/interceptor/MessageStoreInterceptor.html
In der ersten Aktion (# 1) werden wir Anmerkungen hinzufügen müssen und die Importe um sie zu unterstützen:
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
@InterceptorRefs({
@InterceptorRef(value = "store", params = {"operationMode","STORE"}),
@InterceptorRef("defaultStack"),
})
In die zweite Aktion (# 2) müssen wir Anmerkungen und die Importe hinzufügen, um sie zu unterstützen:
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
@InterceptorRefs({
@InterceptorRef(value = "store", params = {"operationMode","RETRIEVE"}),
@InterceptorRef("defaultStack"),
})
Und jetzt ist es wor ks.
können Sie Ihnen jsp Seite zeigen? –
Ich weiß nicht, ob während der Standardverkettung Fehler bei der Aktion aufgetreten sind. Verkettung ist fast immer schlecht, übrigens. –
@DaveNewton: guter Punkt, ich habe es komplett vermisst :) –