1

我的 struts 应用程序出现问题,要求用户使用 userUpdateAction 的表单操作更新他的详细信息,而表单 bean 是 UserUpdateForm。我有 servlet 过滤器来检查用户是否已经登录。如果他没有登录,我将转发到登录操作。如果他登录,我将向他显示更新表单,在所有成功验证后将其转发到空白页面。

struts-config.xml

<action path="/userUpdateAction" type="com.vaannila.action.userUpdateAction" name="UserUpdateForm" input="/update.jsp"  validate="true" scope="request">
            <forward name="success" path="/updateSuccess.jsp"  />
            <forward name="error" path="/update.jsp" />
</action>

动作类

public class userUpdateAction extends Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest req, HttpServletResponse res) throws Exception {
        UserUpdateForm userform = (UserUpdateForm) form;
        System.out.println("form values:" + userform.getEmail());
        return mapping.findForward("success");
    }
}

转发名称是正确的(成功在类和 struts-config.xml 中都是正确的)。

execute 方法也正确地覆盖了 Action 的执行方法。

在tomcat控制台中我可以看到

user already logged in start chain execution
2 Feb, 2012 9:12:10 AM org.apache.struts.chain.commands.servlet.CreateAction createAction
INFO: Initialize action of type: com.vaannila.action.userUpdateAction
errors : {}

userUpdateAction 已初始化,但它不执行execute方法并转到空白页。

4

1 回答 1

0

我在评论部分看到发布的问题已针对特定用户解决。我的行为与描述的相同(提交 http 请求但只返回一个空白页面)。想与他人分享我的决心,特别是因为这里的最初答案帮助我达成了我的决心。

我和我的团队正在从 Struts 1.1 升级到 1.3(一个很大的飞跃)。大多数我们所有的动作类都使用 perform() 方法。事实证明,对于 v1.1,不推荐使用 perform() 并添加了 execute()。在 v1.2 中,perform() 被删除。在我们开始升级工作之前,这些信息从未在我们的初步研究中找到。我不知道为什么我们最初的应用程序编写者多年前不使用 execute()。

我们更改了操作类以使用 execute() 方法,一切都重新开始工作。

希望这可以在将来节省其他人的时间和精力。

参考 Struts v1.1 API

参考 Struts v1.2 API

于 2014-09-23T16:05:51.230 回答