Получить привязанные данные объекта bean от внешнего javascript

0

В моем бэк-бэне у меня есть список, который привязан к datatable. Мне нужно получить данные списка (называемые маршрутами) внутри внешнего javascript.

Поддержка боба

@Component("routeBean")
@Scope("session")
public class RouteBean {

    List<RouteModel> routes;
    private RouteModel routeModel;

    public List<RouteModel> getRoutes() {
        return routes;
    }

    public void setRoutes(List<RouteModel> routes) {
        this.routes = routes;
    }

    public void addToList(){
        routes.add(getRouteModel());
        setRouteModel(new RouteModel());
    }

    public RouteModel getRouteModel() {
        return routeModel;
    }

    public void setRouteModel(RouteModel routeModel) {
        this.routeModel = routeModel;
    }
            .......................
}

Jsf

<p:fieldset legend="routeFieldset">
    <p:inputText id="txtKm" value="#{routeBean.routeModel.km}"/><br/>
    <p:commandButton value="Route Toevoegen" id="btnSaveRoute"
                                 action="#{routeBean.addToList}"
                                 update="routeListPanelGroup"
                                 oncomplete="showBeanData()"/> <!-- this will execute the javascript method and show the data -->
</p:fieldset>
<p:fieldset legend="Routelijst">
    <h:panelGroup id="routeListPanelGroup">                              
        <p:dataTable value="#{routeBean.routes}"
                     var="route" id="routeListDTable"
                     widgetVar="routeWidget">

            <p:column headerText="Id">
                <h:outputText value="#{route.id}"/>
            </p:column>

            <p:column headerText="Km">
                <h:outputText value="#{route.km}"/>
            </p:column>
        </p:dataTable>
    </h:panelGroup>
</p:fieldset>
    .......................

Внешний Javascript

function showBeanData(){
    alert(backing bean data -> routes); //??????
}

Таким образом, когда пользователь нажимает на "btnSaveRoute", новый объект добавляется в список " маршруты " (это отлично работает). И после этого метод javascript должен получить мне " маршруты " внутри внешнего javascript без использования скрытых полей?

Примечание. Я использую сетки

Теги:
jsf
primefaces

1 ответ

0
Лучший ответ

Прочитайте документацию PrimeFaces на RequestContext. Витрина здесь.

В принципе, идея состоит в том, что вы можете отправлять данные из вашего бэкэнбона на клиентскую сторону, используя метод #RequestContext.addCallbackParam(). На стороне клиента выполните handleComplete(xhr, status, args) в oncomplete и получите данные из args.

  • 0
    Мне не удалось добавить это в мою ситуацию. Я сделал следующее: в routeBean в конце метода addToList RequestContext.getCurrentInstance().addCallbackParam("routes", routes); , в JavaScript function handleComplete(xhr, status, args) { alert(args.routes.toSource()); } , в jsf в commandButton oncomplete="handleComplete(xhr, status, args)" . Я получаю ({empty: false}) как результат с помощью JavaScript. Не могли бы вы показать это на моих кодах?
  • 1
    routes возвращаются как объект JSON. Например, если вы возвращаете объект User со свойством Firstname , в JavaScript вы можете получить имя с помощью args.user.firstname . Если я не ошибаюсь, функция toSource() - это функция, которую вы написали на стороне сервера. Следовательно, клиентская сторона не может знать, как ее выполнить. Просто поиграйте с этим некоторое время. Я думаю, вы в конце концов поймете, как получить данные списка из args.routes . Попробуйте alert(args.routes) чтобы подтвердить, что данные есть.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню