我遇到以下代码时出现问题:
<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标签时如何传递额外的请求参数?非常感谢。
答案 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
的形式提供。