f: параметр не передается в запросе ajax - PullRequest
1 голос
/ 28 сентября 2011

У меня проблемы со следующим кодом:

<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>

Я хочу отправить параметр типа в запросе, чтобы я мог получить значение с помощью:

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

Однако, когда я ссылаюсь на тип String, я просто получаю значение null, я даже проверил параметры запроса с помощью Firebug и эффективно передал adminradorAutocompleteType = autoCompleteHidden, но значение type = никогда не публикуется.Что я делаю не так ?, как я могу передать дополнительные параметры запроса при использовании тега f: ajax JSF 2 ?.Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

Как указано в этой теме форума PF , <p:ajax> является , а не поддерживается в <p:autoComplete>.Кроме того, передача дополнительных аргументов невозможна в completeMethod.

Я думаю, что <p:remoteCommand> наиболее подходит для вашей цели.Он генерирует функцию JS, которая позволяет вам установить свойство компонента.Эта функция JS в свою очередь вызывается атрибутом onstart <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 в рамках метода complete().

2 голосов
/ 28 сентября 2011

Нашел решение проблемы, хитрость была в том, чтобы использовать атрибут f: как предложено в этой ссылке:

f: param или f: поддержка атрибутов при автозаполнении простых лиц?

, так как f: param не отправлялся в запросе, а полный метод требовал для работы фиксированного параметра.

...