Struts2 我怎样才能引用;执行;从Struts 2中的另一个操作重定向的操作的方法?

Struts2 我怎样才能引用;执行;从Struts 2中的另一个操作重定向的操作的方法?,struts2,struts-config,actioncontext,Struts2,Struts Config,Actioncontext,在struts 2中,我在从一个操作重定向到另一个操作时遇到了问题 在操作一(名为:StudentZuPruefungHinzufuegen)中,我正在创建操作错误,并希望在操作二(名为:zeigepruefungslite)中显示这些错误 如果我只是使用struts中的“redirectAction”,它会在我想要显示的地方显示正确的操作错误。问题是框架在显示带有操作错误的resultpage之前不会调用我的“execute”方法。虽然我在“execute”方法中填充的表是空的,并且生成的页面

在struts 2中,我在从一个操作重定向到另一个操作时遇到了问题

在操作一(名为:StudentZuPruefungHinzufuegen)中,我正在创建操作错误,并希望在操作二(名为:zeigepruefungslite)中显示这些错误

如果我只是使用struts中的“redirectAction”,它会在我想要显示的地方显示正确的操作错误。问题是框架在显示带有操作错误的resultpage之前不会调用我的“execute”方法。虽然我在“execute”方法中填充的表是空的,并且生成的页面实际上是无用的

有谁能告诉我,在重定向到操作2时,如何让Struts调用该方法

我的struts.xml如下所示:

<action name="ZeigePruefungsliste"
class="de.nak.multiplechoice.action.ZeigePruefungslisteAction">
    <interceptor-ref name="store">
        <param name="operationMode">RETRIEVE</param>
    </interceptor-ref>
    <interceptor-ref name="defaultLoginStack" />
    <result type="tiles" name="*">pruefungsListe</result>
</action>

<action name="StudentZuPruefungHinzufuegen"
class="de.nak.multiplechoice.action.EditiereTeilnehmerAction">
    <result type="tiles">studentZuPruefungHinzufuegen</result>
    <interceptor-ref name="store">
        <param name="operationMode">STORE</param>
    </interceptor-ref>
    <interceptor-ref name="defaultLoginStack" />
    <result name="input" type="redirectAction">
        <param name="actionName">
            ZeigePruefungsliste
        </param>
    </result>
</action>

检索
普鲁芬斯莱特
学生Zupurefunghinzufuegen
贮藏
ZeigePruefungsliste
编辑: 我的动作类的代码

public class EditiereTeilnehmerAction extends AbstractAction {

private static final long serialVersionUID = 882657701678551299L;

private Long ausgewaehltePruefungId;

private List<Nutzer> studenten;

private List<Long> ausgewaehlteStudenten;

@Override
public String execute() {
    if (ausgewaehltePruefungId == null) {
        addActionError("Es muss eine Prüfung ausgewählt werden.");
        return INPUT;
    }
    studenten = getNutzerService().ladeAlleStudenten();
    return SUCCESS;
}

public String zuPruefungHinzufuegen() {
    getPruefungService().registriereStudentenFuerPruefung(ausgewaehltePruefungId, ausgewaehlteStudenten);
    return SUCCESS;
}

public List<Nutzer> getStudenten() {
    return studenten;
}

public void setStudenten(List<Nutzer> studenten) {
    this.studenten = studenten;
}

public Long getAusgewaehltePruefungId() {
    return ausgewaehltePruefungId;
}

public void setAusgewaehltePruefungId(Long ausgewaehltePruefungId) {
    this.ausgewaehltePruefungId = ausgewaehltePruefungId;
}

public List<Long> getAusgewaehlteStudenten() {
    return ausgewaehlteStudenten;
}

public void setAusgewaehlteStudenten(List<Long> ausgewaehlteStudenten) {
    this.ausgewaehlteStudenten = ausgewaehlteStudenten;
}

}

public class ZeigePruefungslisteAction extends AbstractAction {

private static final long serialVersionUID = -7559234907568287686L;
private List<Pruefung> pruefungen;

@Override
public String execute() {
    pruefungen = getPruefungService().getAllePruefungen(getAktuellenNutzer());
    return SUCCESS;
}

public List<Pruefung> getPruefungen() {
    return pruefungen;
}

}

public abstract class AbstractAction extends ActionSupport {

private static final long serialVersionUID = -6905222101893534102L;

private INutzerService nutzerService;

private IPruefungService pruefungService;

public HttpSession getHttpSession() {
    HttpServletRequest request = (HttpServletRequest) ActionContext
        .getContext().get(StrutsStatics.HTTP_REQUEST);
    return request.getSession(true);
}

public Nutzer getAktuellenNutzer() {
    return nutzerService.get(((Nutzer) getHttpSession().getAttribute(
        StrutsKonstanten.NUTZER)).getId());
}

protected INutzerService getNutzerService() {
    return nutzerService;
}

public void setNutzerService(INutzerService nutzerService) {
    this.nutzerService = nutzerService;
}

protected IPruefungService getPruefungService() {
    return pruefungService;
}

public void setPruefungService(IPruefungService pruefungService) {
    this.pruefungService = pruefungService;
}

}
public类editieretailnehmeraction扩展了AbstractAction{
私有静态最终长serialVersionUID=8826577016718551299L;
私人长假;
私人名单学生;
私人名单AusgewahlteStudenten;
@凌驾
公共字符串execute(){
如果(AusgwaehltePrueFungId==null){
addActionError(“Es muss eine Prüfung ausgewählt werden.”);
返回输入;
}
studenten=getNutzerService().ladealestudenten();
回归成功;
}
公共字符串zuPruefungHinzufuegen(){
getPruefungService().RegistrieRestudentfuerRuefung(AusgwaehltePrueFungId,AusgwaehlteStudenten);
回归成功;
}
公共列表getStudenten(){
返回学生;
}
公共无效设置学生人数(列出学生人数){
this.studenten=studenten;
}
public Long getauseghltepruefungid(){
返回AusgewahLTepruefungid;
}
公共无效设置AusgwaehltePruefungId(长AusgwaehltePruefungId){
this.ausgawehltepruefungid=ausgawehltepruefungid;
}
公共列表getausgawehltestudenten(){
返回AusgewahlteStudenten;
}
公共无效设置AusgewahLTestudenten(列出AusgewahLTestudenten){
this.ausgawehltestudenten=ausgawehltestudenten;
}
}
公共类ZeigePruefungslisteAction扩展了AbstractAction{
私有静态最终长serialVersionUID=-755923490756287686L;
私人名单普鲁芬根;
@凌驾
公共字符串execute(){
pruefungen=getPruefungService().getAllePruefungen(getAktuellenNutzer());
回归成功;
}
公共列表getPruefungen(){
返回普鲁芬根;
}
}
公共抽象类AbstractAction扩展了ActionSupport{
私有静态最终长serialVersionUID=-6905222101893534102L;
私人INutzerService nutzerService;
私人IPruefungService pruefungService;
公共HttpSession getHttpSession(){
HttpServletRequest=(HttpServletRequest)ActionContext
.getContext().get(strutstatics.HTTP_请求);
返回请求.getSession(true);
}
公共Nutzer getAktuellenNutzer(){
返回nutzerService.get(((Nutzer)getHttpSession().getAttribute(
strutskanstanten.NUTZER)).getId();
}
受保护的INutzerService getNutzerService(){
退货服务;
}
公共无效设置nutzerService(INutzerService nutzerService){
this.nutzerService=nutzerService;
}
受保护的IPruefungService getPruefungService(){
返回pruefungService;
}
公共无效设置pruefungService(IPruefungService pruefungService){
this.pruefungService=pruefungService;
}
}
您好,
马库斯(Marcus)

有点困惑,它什么时候起作用,什么时候不起作用。以及如何定义defaultLoginStack拦截器堆栈。好的,我试着用另一种方式来描述它。我试图在动作二的jsp中显示动作一的动作错误。如果我只是以使用重定向操作显示第二个操作的方式配置struts.xml,则会显示错误,但页面的其余部分为空。我使用操作2的execute方法初始化这个页面的内容。所以我的问题是,在显示引用到操作的jsp之前,如何配置Struts2正在执行我的“execute”方法。结果类型“chain”不是我的选项。defaultLoginStack由我自己定义,它只在interceptorchain中包含一个额外的拦截器,用于检查用户是否登录。如果重定向到某个操作,客户端将经历一个完整的请求周期,并且将执行该操作配置中定义的任何方法,就像它是一个新的请求(因为它是)。事实上,这就是为什么我不能理解的一点,在我的操作中没有调用“execute”方法。如果您查看我的配置:我已经说过启动一个“重定向操作”到我的“ZeigePruefungsliste”操作。但是在这种配置中,不会调用“execute”方法。我的struts.xml有什么问题吗?