我有一个项目到期(实际上是过度的)学校,但不能让一些简单的工作。
我正在运行 Netbeans 7.2.1、Glassfish 3.1.2.2 和最新的 Java JDK。
我有四个 JSF 页面,index.xhtml ItemAdd.xhtml、ItemCatalog.xhtml 和 ItemDetail.xhtml 以及一个 servlet SessionServlet。我已经验证我可以直接访问每个页面,即
http://localhost:8080/CMIS440Spitzer-Project2/faces/ItemDetail.xhtml
作品。但是,当我从其中一个 JSF 页面转到我的 servlet 并转发请求时,我收到 glassfish 404 错误。
这是我进行转发的极其简单的 servlet 代码:
if (request.getParameter("target").contains("Add Item")) {
String URL = request.getContextPath() + "/faces/ItemAdd.xhtml";
System.out.print(URL);
RequestDispatcher dispatcher = request.getRequestDispatcher(URL);
dispatcher.forward(request, response);
}
一个控制台我得到以下内容,我可以将其粘贴到我的浏览器中并且它可以工作:
INFO: /CMIS440Spitzer-Project2/faces/ItemAdd.xhtml
由于我收到控制台消息,我知道请求正在到达 servlet,并且它正在访问正确的代码块,并且因为我收到 Glassfish 404 错误,我知道它正在正确端口上转发到我的机器。
RequestDispatcher 有什么问题?为什么这不起作用?
谢谢。
<rant>
这比这个问题包含更多,但我使用过 PHP、perl、C++、C、Java 和其他一些。我以前从来没有感觉到一种语言(在这种情况下是 Java 的 JSF 实现)正在积极地试图让我的生活尽可能地困难。例如,这个环境中许多需要的东西都是以映射的形式:需要所有请求参数的列表,你得到一个映射,需要一个所有会话参数的列表,你得到一个映射等。但是在 JSF 中你不能轻易循环地图!为什么,因为它很慢。我发现一个链接基本上是来自 Java 开发人员的 Mea Culpa,他提到这将是 O(N) 速度,所以它会很慢。换句话说,Java JSF 开发人员预先优化了我的代码并要求我将映射转换为列表。
在这一点上,我遇到了一些关于反射和访问私有方法/属性的奇怪错误,而现在——我在代码中的什么地方做任何类似的事情。我使用标准的 getter/setter 来返回地图键集。
甚至不要让我开始了解 getter/setter 的命名约定(大写转换为小写,在前面添加一个 get/set)
也许是我,但整个设置似乎过于迟钝,难以理解并且不必要地复杂。
感谢您阅读我的咆哮。我在这种方式上的时间比我认为的要长,而且在尝试做简单的事情时几乎要流泪。
</rant>