Передача объекта AngularJS в JSF-вызов

Я использую AngularFaces и хочу передать объект Angular JS методу JSF-компонента. Я перебираю таблицу и хочу поставить определенные кнопки для каждой итерации:

<table ng-table="tableParams">
    <tr ng-repeat="user in $data">
        <td data-title="'User id'">{{user.id}}</td>
        <td data-title="'Name'">{{user.name}}</td>
        <td data-title="'Hide User'">
            <p:commandButton value="Hide" id="hideUser" action="#{bean.hideUser({{user.id}})}"">
                <f:param name="myId" value="{{disponent.dispNr}}" />
            </p:commandButton>
        </td>
    </tr>
</table>

Важная строка:

<p:commandButton value="Hide" id="hideUser" action="#{bean.hideUser({{user.id}})}">

Я пробовал несколько способов, например

<p:commandButton value="Hide" id="hideUser" action="#{bean.hideUser(user.id)}">

Но ничто не работает. Как мне этого добиться?

1 ответ

Передача объекта AngularJS в JSF также доставила мне много головной боли. Через некоторое время я нашел решение, но я все еще не доволен им. Я надеюсь найти лучшее решение в одной из следующих версий AngularFaces.

На данный момент вы можете использовать глобальную функцию afToJson для сериализации объекта AngularJS и передачи его в JSF в виде строки:

    <button class="carFilterButton" jsf:action="#{selectionBean.showDetails()}"
              ng-click="selectionBean.carAsJSon=afToJson(car);">show me!</button>

(см. https://github.com/stephanrauh/AngularFaces/blob/master/AngularFaces_2.0/AngularFaces-2.0-examples/src/main/webapp/carshop/ngtable.xhtml).

На стороне сервера вы можете использовать JSONUtilites AngularFaces для десериализации строки обратно в обычный объект:

    private String carAsJSon;

    private Car car;

    public String getCarAsJSon() {
        return carAsJSon;
    }

    public void setCarAsJSon(String carAsJSon) {
        this.carAsJSon = carAsJSon;
        int pos = carAsJSon.indexOf(",\"$$hashKey\"");
        if (pos > 0)
            carAsJSon = carAsJSon.substring(0, pos) + "}";

        Car car = (Car)  JSONUtilities.readObjectFromJSONString(carAsJSon, Car.class);
        return getCarBean().showDetails(car);
    }

(см. https://github.com/stephanrauh/AngularFaces/blob/master/AngularFaces_2.0/AngularFaces-2.0-examples/src/main/java/de/beyondjava/jsf/sample/carshop/SelectionBean.java).

Другие вопросы по тегам