如果它们位于不同的文件夹中,如何在Spring控制器中提供视图页面?

时间:2013-10-04 08:46:19

标签: java spring jsp spring-mvc

我的WEB-INF中有两个文件夹。

Folder1 包含3个jsp,如page1.jsp , page2.jsp , page3.jsp

Folder2 包含page4.jsp

dispatcher-Serlet.xml 中,我配置了,

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/folder1/" />
    <property name="suffix" value=".jsp" />
</bean>

控制器中,

@RequestMapping(value="page4.html",method=RequestMethod.GET)
public  String getTransfer(){

    List<String> list = new LinkedList<String>();
    Hashtable<String , Object> map = MyHashtableClasss.getDetails;

    if(!map.isEmpty()){
        Set<String> keys = map.keySet();
        for(String key: keys){
                list.add(map.get(key).getUserName());
        }
    }
    model.addAttribute(list);

    return "page4";
}

如何将 page4.jsp 添加到视图中。因为我在Folder1中没有page4.jsp。

一般情况下,如何在JSP中的differenf文件夹中显示不同的Spring。这可能吗?如果没有,那么替代方案是什么。

希望我们的堆栈用户能帮助我。

2 个答案:

答案 0 :(得分:6)

1 更改

<property name="prefix" value="/WEB-INF/folder1/" />

<property name="prefix" value="/WEB-INF/" />

并返回带文件夹路径的视图

return "folder1/page4";

2 其他方法是配置多个视图解析程序bean并为每个bean设置优先级。请查看以下链接以了解解决方案和限制。

Multiple View resolvers in spring mvc

Spring MVC with multiple view resolvers

修改

另一种方法是通过扩展InternalResourceViewResolver来构建自己的视图解析器。在扩展视图解析器中,您可以添加逻辑来扫描子文件夹,并找到带有返回视图名称的jsp文件。

答案 1 :(得分:0)

您可以选择为ViewResolver指定的文件夹。

如果指定/ folder1,则将在folder1下解析JSP。如果不这样做,则需要在需要时自行指定/ folder1。

如果您确实需要或者它有助于分解,您可以使用函数或常量来为您执行此操作。

public class Views {
    public static String legacy (String name) {return "folder1/"+name;}
    public static String modern (String name) {return "folder2/"+name;}
}

如果在单独的应用程序上下文中定义控制器,则可以使用单独配置的ViewResolver(具有不同的路径)将它们连接起来。

但对我来说这一切似乎都很明显,我不确定你为什么要提出这样的问题。 Spring可以神奇地知道,对于一个视图,你想要一个不同的文件夹吗?我希望不是,我更喜欢它在我指定的文件夹中可靠地工作。