我有一个复合组件
<co:interface>
<co:attribute name="editAction" required="false" targets="edit" method-signature="java.lang.String f()"/>
<co:attribute name="saveAction" required="false" targets="save" method-signature="java.lang.String f()"/>
<co:attribute name="isBrowseModus" required="true"/>
<co:attribute name="user" required="true"/>
<co:attribute name="editListener" targets="edit" method-signature="void f(javax.faces.event.ActionEvent)" />
<co:actionSource name="save"/>
</co:interface>
<co:implementation>
............
<p:inplace id="inpLand" editor="true"
toggleable="#{not cc.attrs.isBrowseModus}"
style="#{cc.attrs.isBrowseModus ? 'color: black' : 'color: blue'}">
<p:inputText value="#{cc.attrs.user.land}" label="text"/>
</p:inplace>
...........
<c:if test="#{cc.attrs.isBrowseModus}">
<p:commandButton id="edit" value="#{msgs.co_userdata_button_edit}" icon="ui-icon-unlocked" actionListener="#{cc.attrs.editListener}"/>
</c:if>
实际上,这个复合组件是由调用myData.xhtml的视图调用的:
<h:form id="dataForm">
<mc:UserData user="#{dataBean.user}"
isBrowseModus="#{dataBean.browseModus}"
saveAction="#{dataBean.save}"
editListener="#{dataBean.editActionListener}">
</mc:UserData>
</h:form>
我的目标是:在该复合组件中,用户可以通过单击“编辑”按钮来更改任何用户数据。我更喜欢使用PRIMEFACES的inplace标签。单击编辑按钮后,所有可更改字段都应以蓝色显示(请参阅复合组件)。
我的问题是我不知道如何将 isBrowseModus 标志(定义为cc-attribute)更新为false。实际上我是在 editActionListener (在managedBean中定义)中进行的,但遗憾的是没有任何结果。
从托管bean(dataBean)中提取:
....
public boolean isBrowseModus() {
return browseModus;
}
public void setBrowseModus(boolean browseModus) {
this.browseModus = browseModus;
}
public void editActionListener(ActionEvent event) {
browseModus = false;
FacesContext.getCurrentInstance().renderResponse();
}
....
我不熟悉JSF,因为我可能需要一个月才能使用JSF。也许有一个更方便的方法来实现这个结果。 但不幸的是我不知道如何。 有没有人可以帮我解决这个问题?
非常感谢提前。 问候, 博多
答案 0 :(得分:0)
布尔变量正在被数据传递,cc.attrs.isBrowseModus与databean中的browseModus无关。理想的解决方案是保持布尔对象以便传递引用,但由于Java中的布尔包装器也是不可变的,因此您需要使用包含布尔值的内容,例如来自commons-lang的MutableBoolean类。
<h:form id="dataForm">
<mc:UserData user="#{dataBean.user}"
isBrowseModus="#{dataBean.browseModus}"
saveAction="#{dataBean.save}"
editListener="#{dataBean.editActionListener}">
</mc:UserData>
</h:form>
...
<p:inplace id="inpLand" editor="true"
toggleable="#{not cc.attrs.isBrowseModus.value}"
style="#{cc.attrs.isBrowseModus ? 'color: black' : 'color: blue'}">
<p:inputText value="#{cc.attrs.user.land}" label="text"/>
</p:inplace>
...
....
MutableBoolean browseModus = new MutableBoolean();
public MutableBoolean isBrowseModus() {
return browseModus;
}
public void setBrowseModus(MutableBoolean browseModus) {
this.browseModus = browseModus;
}
public void editActionListener(ActionEvent event) {
browseModus.setValue(true);
FacesContext.getCurrentInstance().renderResponse();
}
....