JSF 和 HTTP 请求 [重复]

Posted

技术标签:

【中文标题】JSF 和 HTTP 请求 [重复]【英文标题】:JSF & HTTP Requests [duplicate] 【发布时间】:2017-04-24 01:53:34 【问题描述】:

让以下代码片段包含指向items.xhtml 的链接,该链接列出项目名称并允许用户选择项目以查看其详细信息:

<?xml ... ?>
<!DOCTYPE ... >
<html ... >
    <h:head>
        <title>Welcome</title>
    </h:head>
    <h:body>
        <h:outputLink value="#facesContext.externalContext.requestContextPath/faces/client/items.xhtml">Items</h:outputLink>   
    </h:body>
</html>

当用户单击名为Items 的链接时,请求行指出正在请求的资源是/javaee7-training/faces/client/items.xhtml,并且应该对其应用的所需操作是GET。没关系。

以下代码显示了items.xml的片段:

<?xml ... ?>
<!DOCTYPE ...>
<html ...>
    <h:head>
        <title>items</title>
    </h:head>
    <h:body>
        <h:form prependId="false">
            <h:selectOneRadio value="#bean.itemId"
                              layout="pageDirection">
                <c:forEach items="#bean.items" var="itm">
                    <f:selectItem itemValue="#itm.itemno" 
                                  itemLabel="#itm.itemname" />
                </c:forEach>
            </h:selectOneRadio>

            <h:commandButton value="Details" action="item" />
        </h:form>
    </h:body>
</html>

现在,当用户单击名为Details 的按钮时,请求行指出正在请求的资源是/javaee7-training/faces/client/items.xhtml,并且应该对其应用的所需操作是POST。我没想到会出现这个结果,因为当用户单击名为Details 的按钮时,请求的资源是/javaee7-training/faces/client/item.xhtml,而所需的操作是GET

谁能解释一下这个结果以及为什么我错了?

提前谢谢你

【问题讨论】:

【参考方案1】:

&lt;h:commandButton&gt; 总是触发 post 请求,因为它应该在 &lt;h:form&gt; 内。在 JSF arena 中,表单始终作为 POST 请求提交。如果您需要触发 GET 请求,请使用 &lt;h:button&gt; 而不是 &lt;h:commandButton&gt;

用法示例:

<h:button value="Click Me!!" outcome="item"> <!--viewId is item insted of items-->
 <f:param name="item1" value="itemVal1" />
 <f:param name="item2" value="itemVal2" />
</h:button>

【讨论】:

我同意@AsSiDe,您可以使用&lt;h:link outcome="/client/items" value="To Items" /&gt; 代替不使用JSF 导航的outputLink 非常感谢您的有用回答 @estebanrincon 感谢您的帮助

以上是关于JSF 和 HTTP 请求 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

请求范围和查看范围[重复]

JSF primefaces文件上传问题

JSF 2.0 在整个会话中从浏览器和以编程方式设置区域设置 [重复]

JSF 2.2 多部分表单未提交[重复]

jsf 2.2 中的 URL 更新 [重复]

Facelet,Servlet,JSP,JSF之间的区别和关系[重复]