0

次のユーザーコントローラーがあります:

@RequestMapping("/user")
public class UserController {

    private static final String ID = "id";

    private final Log logger = LogFactory.getLog(getClass());

    private UserManager um;

    @Autowired
    public void setUserManager(UserManager userManager) {
        this.um = userManager;
    }

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView showUser(HttpServletRequest request) {
        User user = null;

        String id = (String) request.getParameter(ID);
        if (id == null) {
            String message = "Cannot find user id";
            logger.error(message);
            return new ModelAndView("WEB-INF/jsp/error.jsp", "message", message);
        }
        try {
            user = (User) um.getUserByUserId(Integer.parseInt(id));
        } catch (Exception e) {
            String message = "Cannot find user with id: " + id;
            logger.error(message);
            return new ModelAndView("WEB-INF/jsp/error.jsp", "message", message);
        }

        logger.info("Returning user view for user id: " + id);
        return new ModelAndView("WEB-INF/jsp/user.jsp", "user", user);
    }


    @RequestMapping(value = "/new", method = RequestMethod.GET)
    public ModelAndView getNewUserForm(Model model) {
        logger.info("Get new user form");
        return new ModelAndView("WEB-INF/jsp/userForm.jsp", "user", new User());
    }

すべてのビュー ファイルは WEB-INF/jsp/ にあります

ページに移動しようとすると: localhost:8080/myapp/user.htm すべて正常に動作しますが、移動しようとすると: localhost:8080/myapp/user/new.htm エラー 404 ページが見つかりません。

さらに、ログが表示されるため、このコードが実行されます。

@RequestMapping(value = "/new", method = RequestMethod.GET)
        public ModelAndView getNewUserForm(Model model) {
            logger.info("Get new user form");
            return new ModelAndView("WEB-INF/jsp/userForm.jsp", "user", new User());
        }

404 エラー ページの情報: /myapp/user/WEB-INF/userForm.jsp not foud

そして、ここに私の問題があります。これを次のように変更する方法: /myapp/WEB-INF/userForm.jsp ? リクエスト マッピングはどうすればよいですか?

4

1 に答える 1

0

コントローラーと戻り値の型については、Spring のドキュメントをご覧ください。そこには素晴らしい例があり、コントローラーメソッドを使用できる多くの方法を見ることができます。

あなたの場合、ビューへのフル パスを指定する必要はありません。ビュー名だけでOKです。

@RequestMapping(value = "/new", method = RequestMethod.GET)
public ModelAndView getNewUserForm(Model model) {
    logger.info("Get new user form");

    return new ModelAndView("userForm", "user", new User());
}

このようにすることもできます。春は多くの可能性を可能にします。ドキュメントでは、これらすべての概要が説明されています。

@RequestMapping(value = "/new", method = RequestMethod.GET)
public String getNewUserForm(Model model) {
    logger.info("Get new user form");
    model.addAttribute("user", new User());
    return "userForm";
}

また、 View Resolverが構成されていることを確認してください。ドキュメントから、このようなものが必要になることがわかります。

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
于 2013-01-26T13:35:27.880 に答える