【发布时间】:2018-02-12 11:38:58
【问题描述】:
我正在开发一个 JSF (2.2) 应用程序。我看到一些奇怪的行为与 h:form 和 h:commandbutton 一起使用。
问题 - 我在 searchRecord.xhtml 中有以下代码 -
<h:form>
<!-- Input fields -->
<h:commandbutton type="submit" value="Search" title="Search" action="#{bean.search}"/>
</h:form>
我面临的问题是当我点击提交按钮时,它显示 404-page not found 并且 URL 指向当前页面。它没有执行指定的 bean 操作。
我试图调试这个。当表单被翻译成 HTML 时,表单会使用 method="post" action="/MyApplication/WEB-INF/searchRecord.xhtml" 生成(这看起来是正确的行为)。不过,在单击按钮时,我得到了 404。
谁能帮我找出问题所在?我浪费了我的周末来解决这个问题,但徒劳无功。
编辑 - IDE - 日食 JSF 版本 - Mojarra 2.2.8 我的项目的目录结构是 -
项目
- Java Resource
----src -> contains java files
- WebContent
---- META-INF
---- WEB-INF
------facelets -> contains *.xhtml files
------resources -> contains img, css and JS files in respective folders
------commonLayout.xhtml
- index.xhtml
我使用 launchHandler servlet 访问我的应用程序,该 servlet 验证请求参数并转发到 searchRecord.xhtml。
我可以看到 searchRecord.xhtml。但是现在当我点击时,我得到了 404。
作为一个标准,我们需要使用servlet,然后进行相应的转发。
【问题讨论】:
-
你的 bean.search 方法中写了什么? faces-config.xml 中定义的导航规则是否正确?
-
type="submit"是多余的……(如果我没记错的话,有时甚至会引起问题) -
“这看起来是正确的行为” 不,不是。尝试在浏览器的地址栏中输入该 URL。尝试以这种方式访问任何 /WEB-INF 文件。包括 web.xml。你会发现这是不可能的。并非没有理由。
-
@EAP - bean.search 方法正在返回基于用户输入的结果(字符串)。高级实现是如果用户参数有效并且在数据库中找到一行则返回成功,如果用户参数无效则返回错误。根据结果,导航到下一页。
-
@BalusC - 是的,它是正确的。我无法访问 /WEB-INF 中的任何资源。你能指出我做错了什么吗?附言- 由于工作场所的限制,我无法在此处发布整个代码。为它道歉!
标签: jsf