Передача объекта 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>
На стороне сервера вы можете использовать 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);
}