如何在普通的<form>中使用<f:ajax>而不是<h:form>?</h:form> </form> </f:ajax>

时间:2012-06-08 08:18:12

标签: ajax jsf

我有一个使用标准HTML <form>标记的搜索表单,并发送一个像search.jsf?country=x&city=y这样的GET请求。它们在视图范围的bean中设置为视图参数。

搜索表单包含两个级联下拉菜单,一个用于国家/地区,另一个用于城市。如何更新<f:ajax>的城市下拉列表而不将<form>更改为<h:form>,从而打破GET功能?我是否必须XMLHttpRequest使用“普通香草”ajax?我怎么能在JSF支持bean上使用它?

1 个答案:

答案 0 :(得分:1)

我只是继续使用<h:form>并向JavaScript提供一些帮助,以便在提交按钮提交时将其转换为GET表单。

类似的东西:

<h:form prependId="false" onsubmit="doGet(this)">
    <h:selectOneMenu id="country" value="#{bean.country}">
        <f:selectItems value="#{bean.countries}" />
        <f:ajax listener="#{bean.loadCities}" render="city" />
    </h:selectOneMenu>
    <h:selectOneMenu id="city">
        <f:selectItems value="#{bean.cities}" />
    </h:selectOneMenu>
    <input type="submit" value="Search" />
</h:form>

使用此JS将其转换为GET表单并删除两个<h:form>特定的隐藏字段:

function doGet(form) {
    form.method = "get";
    form.removeChild(document.getElementsByName(form.name)[1]);
    form.removeChild(document.getElementById("javax.faces.ViewState"));
}