f:param没有在ajax请求中传递

时间:2011-09-27 21:40:06

标签: ajax jsf-2 primefaces el

我遇到以下代码时出现问题:

<h:inputHidden value="autoCompleteHidden" id="administradorAutocompleteType">
                            <f:param value="#{suggestionEntitiesDM.usuario}" name="type"></f:param>
                        </h:inputHidden>
                        <p:autoComplete id="administradorAutocomplete"
                                        value="#{empresaDM.administradorSeleccionada}"
                                        completeMethod="#{suggestionEntitiesDM.suggestionList}"
                                        var="administrador" itemLabel="#{administrador.txtNombreUsuario}"
                                        forceSelection="true" 
                                        itemValue="#{administrador}" converter="entityConverter">
                            <p:ajax event="start" update="administradorAutocomplete" process="administradorAutocompleteType"/>


                        </p:autoComplete>

我想要的是在请求中发送type参数,以便我可以使用:

获取值
String type=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("type");

然而,我只是在引用类型String时调用null,我甚至使用Firebug检查了请求参数,并且有效地传递了administradorAutocompleteType = autoCompleteHidden但是从不发布type = value。 我做错了什么?,在使用f:ajax JSF 2标签时如何传递额外的请求参数?非常感谢。

2 个答案:

答案 0 :(得分:2)

找到问题的解决方案,诀窍是使用此链接中建议的f:属性:

f:param or f:attribute support on primefaces autocomplete?

因为f:param没有在请求中发送,而完整的方法需要一个固定的参数才能工作。

答案 1 :(得分:2)

正如this PF forum topic中所述,<p:ajax><p:autoComplete>支持 。另外,completeMethod中无法传递其他参数。

我认为<p:remoteCommand>最适合您的目的。它生成一个JS函数,允许您设置bean属性。这个JS函数依次由onstart的{​​{1}}属性调用。

<p:autoComplete>

<h:form>
    <p:autoComplete 
        value="#{bean.text}" 
        onstart="setType()"
        completeMethod="#{bean.complete}"
        >
    </p:autoComplete>
    <p:remoteCommand name="setType">
        <f:setPropertyActionListener target="#{bean.type}" value="foo" />
    </p:remoteCommand>
</h:form>

您可以将private String text; private String type; public List<String> complete(String query) { System.out.println("type: " + type); // type: foo // ... } 设置为您想要的任何值。它将在foo方法的范围内以type的形式提供。