ajp*_*243 2 java spring controller constants
我应该指出Spring本身并不一定对这个问题至关重要,但是我在使用Spring时遇到了这种行为,所以这个问题使用了我在Spring中遇到这种情况的情况.
我有一个控制器类,它将请求GET和POST请求映射到特定表单的同一组URL.这个表单对于不同的语言环境有不同的URL,但是只有一个方法用于GET请求,一个用于请求,POST因为表单的控制器级别的逻辑对于每个语言环境站点是相同的(但是逻辑中更深层次的东西,如语言环境) - 特定验证,可能会有所不同).例:
@Controller
public class MyFormController {
// GET request
@RequestMapping(value={"/us-form.html", "/de-form.html", "/fr-form.html"},
method={RequestMethod.GET})
public String showMyForm() {
// Do some stuff like adding values to the model
return "my-form-view";
}
// POST request
@RequestMapping(value={"/us-form.html", "/de-form.html", "/fr-form.html"},
method={RequestMethod.POST})
public String submitMyForm() {
// Do stuff like validation and error marking in the model
return "my-form-view"; // Same as GET
}
}
Run Code Online (Sandbox Code Playgroud)
这样的形式GET和POST工作就好了.您会注意到String用于@RequestMapping值的数组是相同的.我想要做的是将这些URL放在一个位置(理想情况下是static final控制器中的一个字段),这样当我们添加新的URL(对应于未来本地化站点中的表单)时,我们可以将它们添加到一个位置.所以我尝试了对控制器的修改:
@Controller
public class MyFormController {
// Moved URLs up here, with references in @RequestMappings
private static final String[] MY_URLS =
{"/us-form.html", "/de-form.html", "/fr-form.html"};
// GET request
@RequestMapping(value=MY_URLS, // <-- considered non-constant
method={RequestMethod.GET})
public String showMyForm() {
// Do some stuff like adding values to the model
return "my-form-view";
}
// POST request
@RequestMapping(value=MY_URLS, // <-- considered non-constant
method={RequestMethod.POST})
public String submitMyForm() {
// Do stuff like validation and error marking in the model
return "my-form-view"; // Same as GET
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是编译器抱怨该value属性不再是常量.我知道Spring要求value必须是一个常量,但是我曾经认为使用包含文字的文字的final字段(或者static final在我的情况下)将作为"常量"传递.我怀疑这个数组文字必须是动态构造的,以便在解析属性时它是未初始化的.ArrayStringvalue
我觉得用基本的Java知识来解决这个问题应该不是一件很难的事情,但有些事情让我感到震惊,因为经过一些研究后我找不到任何答案.有人可以证实我的怀疑并给出引用或解释为什么可能如此,或否认我的怀疑并解释实际问题是什么?
注意:我不能简单地将URL组合成路径模式,因为每个表单URL都使用其本地化站点的语言,并且不可能进行匹配.我只是将上面的"/{locale}-form.html"字符串作为我的URL,例如.
你是对的,这与Spring无关,所有Annotation参数都必须是编译时常量.这是一个基本的java语言规则.
将数组引用标记为final不会削减它,因为这仍然是完全合法的:
MY_URLS[0] = "es-form.html";
Run Code Online (Sandbox Code Playgroud)
另外,您是如何锁定的,首先将区域设置嵌入到网址中?你在仿效传统链接吗?Spring有很多内置支持使用浏览器的实际语言环境.
| 归档时间: |
|
| 查看次数: |
2799 次 |
| 最近记录: |