传递"得到"参数不起作用,参数在链接中不可见

时间:2015-05-16 20:23:44

标签: jsf get

我是JSF的初学者,我想在未来的网站上编写一些搜索栏。

我制作了两个页面:index.xhtmlsearch.xhtml,我尝试将参数从index.xhtml传递到search.xhtml,所以我做了一个小公式:

    <!-- index.xhtml -->
    <h:form id="Form_search">
        <h:inputText class="search_bar_text" binding="#{se}"></h:inputText>
        <h:button class="search_bar_button" outcome="search">
            <f:param name="search" value="#{se.value}" />
        </h:button>
    </h:form>

总结一下,我想将inputText的内容发送到search.xhtml

但是有一个问题:当我点击提交按钮时,没有传递任何参数,因此我没有/search.xhtml?search=foobar而只有/search.xhtml

我也试过这个,但这也不起作用:

    <!-- index.xhtml -->
    <h:form id="Form_search">
        <h:inputText class="search_bar_text" binding="#{se}"></h:inputText>
        <h:button class="search_bar_button" outcome="search.xhtml?search=#{se.value}">
        </h:button>
    </h:form>

有人可以向我解释这个问题的原因以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

在呈现HTML输出期间评估<f:param value><h:button outcome>,而不是在&#34;提交&#34;您似乎期望的形式。请注意,这里实际上没有提交表单的方法。如果您能够阅读HTML code,您应该在JSF生成的HTML输出中看到它,您可以通过右键单击,在Web浏览器中查看源看到它。

将其修复为真正的GET表单。您根本不需要<h:form><h:inputText><h:button>。你不想要一个POST表格。您似乎不想将输入绑定到bean属性。你不想要一个普通的导航按钮。

<form id="form_search" action="search.xhtml">
    <input name="search" class="search_bar_text" />
    <input type="submit" class="search_bar_button" />
</form>

是的,你可以在JSF中使用纯HTML。

如果你真的,真的出于某种原因需要为此目的使用JSF组件,那么你也可以使用这种POST-redirect-GET-with-view-params技巧。

首先将其添加到index.xhtmlsearch.xhtml

<f:metadata>
    <f:viewParam name="search" value="#{bean.search}" />
</f:metadata>

然后使用此表格:

<h:form id="form_search">
    <h:inputText value="#{bean.search}" styleClass="search_bar_text" />
    <h:commandButton styleClass="search_bar_button" action="search?faces-redirect=true&amp;includeViewParams=true" />
</h:form>

如果您打算在其上使用JSF验证,这可能会有意义。但即便如此,这并不能防止最终用户手动打开带有无效参数的URL。您最好在<f:viewParam>上向search.xhtml本身添加验证。

另见: