将AngularJS对象传递给JSF调用

时间:2015-10-22 13:19:30

标签: angularjs jsf angularfaces

我正在使用AngularFaces,我想将Angular JS对象传递给JSF bean方法。 我正在迭代一个表,并希望为每次迭代都放置特定的按钮:

<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 个答案:

答案 0 :(得分: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)。

在服务器端,您可以使用AngularFaces的JSONUtilites将字符串反序列化为常规对象:

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