Как использовать запрос get и параметры вместе с запросом JSF и ajax?

Интересно, как обычно можно использовать запрос get, параметры и запросы ajax вместе с JSF?

Чего я хочу добиться - это передать параметр id на страницу JSF, извлечь объект с заданным параметром из базы данных и отобразить объект на странице JSF. Затем я хочу внести некоторые изменения в сущность и заполнить ее обратно в базу данных (через ajax).

Я застрял на шаге, где я хочу внести изменения обратно в базу данных. Вот что у меня так далеко:

У меня очень простая страница JSF и контроллер (ManagedBean).

Страница JSF

<h:body>
    <h:form id="myForm">
        <p:messages />
        <h:panelGrid columns="3">
            <h:outputLabel value="#{requestController.id}" />
            <p:commandButton value="Update" action="#{requestController.updateEntity}" update="myForm" />
        </h:panelGrid>
    </h:form>
</h:body>

контроллер

@Component("requestController")
@Scope("request")
public class RequestController {

@Value("#{request.getParameter('id')}")
private String id;

private String entity;

@PostConstruct
public void init() {
    if(id == null || id.equals("")) {
        entity = "Entity not found";
    }
    else if("1".equals(id)) {
        entity = "FirstEntity";
    }
    else {
        entity = "SecondEntity";
    }
}

public String getEntity() {
    return entity;
}

public void updateEntity() {
    entity += "_updated";
}

public String getId() {
    return id;
}
}

Я могу открыть страницу JSF с параметром id, и сущность будет отображаться правильно. Но когда я нажимаю на кнопку обновления, контроллер будет создан заново, а параметр id пропадет.

Каков общий способ обработки параметров запроса вместе с запросами ajax в JSF?

1 ответ

Решение

Решение заключается в добавлении параметра запроса при каждом запросе на странице. Это можно сделать с помощью <f:param> тег.

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

<p:commandButton value="Update" action="#{requestController.updateEntity}" update="myForm" >
    <f:param name="id" value="#{requestController.id}" />
</p:commandButton>
Другие вопросы по тегам