179.md 3.0 KB
Newer Older
W
wizardforcel 已提交
1
# Struts 2 – 如何正确设置结果路径
W
wizardforcel 已提交
2 3 4

> 原文: [https://howtodoinjava.com/struts2/how-to-correctly-set-result-path-in-struts-2/](https://howtodoinjava.com/struts2/how-to-correctly-set-result-path-in-struts-2/)

W
wizardforcel 已提交
5
在这里,结果路径表示 Struts 2 在执行 Action 类中的代码后将解析的 JSP 文件或其他视图文件的位置。 这些**结果路径在 Action 类顶部的@Result 注解**的“位置”中提到。
W
wizardforcel 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

一旦动作类完成执行,它将把控件传递给视图解析器。 视图解析器尝试查找需要渲染的视图文件的位置。 该解决方案主要可以通过两种方式提及:

## 1)将整个相对路径添加到“位置”属性

现在,在这里,一个简单的“ /”可以改变整个含义,所以要小心。

**A)在位置属性**中带有“ /”字符

```java
@Namespace("/default")
@Results({
	   @Result(name="success", location="/WEB-INF/jsp/success.jsp"),
	   @Result(name="input", location="/WEB-INF/jsp/index.jsp")
})
public class TestAction extends ActionSupport 
{
	//More code...
} 

```

上面的定义会将 jsp 文件的位置解析为::

```java
%PROJECT_PATH%/WEB-INF/jsp/success.jsp

```

**B)位置属性**中没有“ /”字符

```java
@Namespace("/default")
@Results({
	   @Result(name="success", location="WEB-INF/jsp/success.jsp"),
	   @Result(name="input", location="WEB-INF/jsp/index.jsp")
})
public class TestAction extends ActionSupport 
{
	//More code...
} 

```

Above definition will resolve the location of jsp file as ::

```java
%PROJECT_PATH%/WEB-INF/content/WEB-INF/jsp/index.jsp

```

W
wizardforcel 已提交
57
**原因:**背后的原因是,开始时的**“ /”在项目根**处解析,而其余路径在项目根目录下解析。 但是,当**不在开始时使用“ /”时,默认的根目录假定为“ / WEB-INF / content”文件夹**,其余的路径与此相对。 因此,当您下次注意时,请在@Result 注解中指定 location 属性。
W
wizardforcel 已提交
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

## 2)将资源根路径定义为常量“ struts.convention.result.path”

您可以在此常量中定义资源的固定部分,即 JSP 文件,然后只需指定 jsp 文件的名称即可,而不必担心其在项目中的位置。 **的另一个优点是,您以后可以在**上将视图文件**移动到其他文件夹中,甚至**重命名文件夹名称**,而不必担心其影响。 您只需要更改此常数中的路径。**

可以在 struts.xml 中将该常量定义为::

```java
<struts>
	<constant name="struts.convention.result.path" value="/WEB-INF/jsp/" />
</struts>

```

在 struts.properties 文件中为::

```java
	struts.convention.result.path=/WEB-INF/jsp/

```

指定此常量后,在 Action 类中,我们只需要指定 JSP 文件名即可。

```java
@Namespace("/default")
@Results({
	   @Result(name="success", location="success.jsp"),
	   @Result(name="input", location="index.jsp")
})
public class TestAction extends ActionSupport 
{
	//More code...
}

```

```java
The second approach involving constant "struts.convention.result.path" is recommended approach.
```

**祝您学习愉快!**