我有一个网站,有公共和保护区.它是使用Struts2(2.5.30)和约定插件(2.5.30)设置的.

在我的一个动作中,我试图使用结果注释从公共(/pub/enrollmentAction)重定向到受保护区域(/prot/CompleteEnrollmentAction)中的另一个动作.

执行重定向时,它会在结果URL前面加上/pub.IE /pub/prot/complete-enrollment.应该是/prot/complete-enrollment.

EnrollmentAction

@Action(results = { @Result(name = "success", location = "/prot/complete-enrollment", type = "redirectAction") }, interceptorRefs = { @InterceptorRef("BasicStack") })
public class Enrollment extends ActionSupport {
  
  @Override
  public String execute() throws Exception {
    
    return "success";
  }

我试着在每个类中都添加了@namespace个注释,但没有成功. 我试着把结果输入到struts.xml中,但它没有正确解析.

如果我输入重定向的URL,我可以手动点击它.

推荐答案

由于您使用的是Convention plugin,因此您需要知道配置是如何按照约定创建的.插件也有自己的配置,如果它被更改了,那么它可能会影响您的代码.

您错误地使用了结果配置.如果你想使用location属性,应该有一个redirect result类型.在redirectAction result类型中没有这样的属性.

@Result(name = "success", location = "/prot/complete-enrollment", type = "redirect")

如果要使用redirectAction结果类型,则

@Result(name = "success", namespace = "/prot", actionName = "complete-enrollment", type = "redirectAction")

Java相关问答推荐

Java事件系统通用转换为有界通配符

在Java中将Charsequence数组更改为String数组或List String<>

Listview—在Android Java中正确链接项目时出错

现场观看Android Studio中的变化

Java记录的不同序列化/反序列化

调用引发泛型异常的泛型方法时出现编译错误

使用Spring Boot3.2和虚拟线程的并行服务调用

为什么Java Annotation接口覆盖对象类中的方法

使用多个RemoteDatabase对象的一个线程

将ByteBuffer异步写入InputStream或Channel或类似对象

Spring Boot中的应用程序.properties文件中未使用的属性

如何获得凌空cookies ,并设置它在下一个请求- android

FETCH类型设置为LAZY,但它仍会发送第二个请求

在Java Spring JPA中插入包含对其他实体的引用的列

在单例类上获取Java锁,了解原因

如何使用带有可选参数的类生成器?

Java中的一个错误';s stdlib SocksSocketImpl?

由于版本不匹配,从Java 8迁移到Java 17和Spring 6 JUnit4失败

如何在Java中正确实现填字游戏求解器

为什么 log4j 过滤器在appender中不起作用