我正在使用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)}">
但是没有用。我怎样才能做到这一点?
答案 0 :(得分:1)
将一个AngularJS对象传递给JSF也让我很头疼。过了一会儿我找到了解决方案,但我仍然不满意。我希望在下一个版本的AngularFaces中找到更好的解决方案。
就目前而言,您可以使用全局函数afToJson来序列化AngularJS对象并将其作为字符串传递给JSF:
<button class="carFilterButton" jsf:action="#{selectionBean.showDetails()}"
ng-click="selectionBean.carAsJSon=afToJson(car);">show me!</button>
在服务器端,您可以使用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);
}