有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Struts2如何在不使用struts的情况下重定向到操作。xml?

如果用户未登录,My webserver会阻止用户访问系统,但有些用户可能有多个配置文件,系统只允许用户选择其中一个进行登录,即,一个用户可能是具有某些权限的普通用户,该用户可能会注销并再次使用管理员权限登录,并且可以访问所有内容

出现这种情况时,我会将用户重定向到一个操作,该操作会强制用户选择他/她的个人资料,但服务器不再知道用户试图访问的操作。我可以通过ActionInvocation检索这些信息,如下所示:

public String initFeature() {
    final ActionInvocation invocation = ServletActionContext.getActionContext(BaseAction.getRequest())
            .getActionInvocation();
    final Object action = invocation.getAction();
    if (!this.isUserFullyLogged() && !(action instanceof ProfileSelectionAction)) {
        final Boolean isPendingProfileSelection = (Boolean) this
                .retrieveSessionAttribute(Constants.PENDING_PROFILE_SELECTION);
        if (isPendingProfileSelection != null && isPendingProfileSelection.booleanValue()) {
            this.saveSessionAttribute("action", action);
            this.saveSessionAttribute("namespace", invocation.getProxy().getNamespace());
            return Constants.PROFILE_SELECTION;
        }

        return Action.LOGIN;
    }
    return Action.SUCCESS;
}

当系统到达概要文件选择操作时,我有用户试图访问的操作和名称空间,但被禁止,但我不知道我必须做什么才能将系统重定向到这个名称空间和操作,因为我只使用struts的操作结果。xml文件


共 (1) 个答案

  1. # 1 楼答案

    可以在struts.xml文件的result配置中使用参数。在action类中创建两个属性,它们将保存action和命名空间的名称,并在struts.xml中使用它们,如下所示:

    <action name="..." class="...">
      <result type="redirectAction">
        <param name="actionName">${action}</param>
        <param name="namespace">${namespace}</param>
      </result>
    </action>
    

    此外,如果您不想创建它们,并且已经在会话中存储了变量,那么也可以使用#session表达式从会话中检索它们

    <action name="..." class="...">
      <result type="redirectAction">
        <param name="actionName">${#session.action}</param>
        <param name="namespace">${#session.namespace}</param>
      </result>
    </action>