我在itemComp.xhtml中有一個上下文菜單,如果我點擊上下文菜單中的任何項目,將調用動作itemDisplay.refreshItems
並完成此操作JavaScript函數showPanel()
將被稱爲通過JSF中的JavaScript從bean獲取更新值
itemComp.xhtml
<rich:contextMenu disableDefaultMenu="true" event="oncontextmenu" submitMode="ajax">
<rich:menuItem disabled="true" style="color:black; font-weight:bold;" value="Items"/>
<rich:menuSeparator/>
<c:forEach items="#{itemDisplay.componentTypeMap.keySet}" var="itemValue">
<rich:menuItem value="#{itemValue}"
rendered="#{(itemValue == 'Bags Report') or
(itemValue == 'Chairs Report') or
(itemValue == 'Tables Report')}"
action="#{itemDisplay.refreshItems}"
oncomplete="showPanel('#{itemValue}','#{item.id}')">
</rich:menuItem>
</c:forEach>
</rich:contextMenu>
在itemDisplayBean.java的refreshItems()
,我設置的所有變量爲真。
itemDisplayBean.java
私人布爾availableBags = FALSE;
public boolean getAvailableBags() {
return this.availableBags;
}
public void setAvailableBags(boolean availableBags) {
this.availableBags = availableBags;
}
private boolean availableBags = false;
public boolean getAvailableBags() {
return this.availableBags;
}
public void setAvailableBags(boolean availableBags) {
this.availableBags = availableBags;
}
private boolean availableChairs = false;
public boolean getAvailableChairs() {
return this.availableChairs;
}
public void setAvailableChairs(boolean availableChairs) {
this.availableChairs = availableChairs;
}
private boolean availableTables = false;
public boolean getAvailableTables() {
return this.availableTables;
}
public void setAvailableTables(boolean availableTables) {
this.availableTables = availableTables;
}
public String refreshItems() {
setAvailableBags(true);
setAvailableChairs(true);
setAvailableTables(true);
}
和itemDisplay.xhtml,我有JavaScript函數showPanel()
如下。
function showPanel(item, itemId) {
if (item == 'Bags Report') {
if (#{itemDisplay.availableBags})
Richfaces.showModalPanel('bags');
else
alert('No bags Found');
} else if (item == 'Chairs Report') {
if (#{itemDisplay.availableChairs})
Richfaces.showModalPanel('chairs');
else
alert('No Chairs Found');
} else if (item == 'Tables Report') {
if (#{itemDisplay.availableTables})
Richfaces.showModalPanel('tables');
else
alert('No Tables Found');
}
}
和這裏的問題是 - 在JavaScript函數,我沒有得到更新後臺bean的值,因此availableBags(if(#{itemDisplay.availableBags}))
是false
(即使它被設置爲true,支持豆),面板如果我刷新頁面,那麼我會從後臺bean(if(#{itemDisplay.availableBags})
)獲得更新後的值,並顯示面板。任何人都可以幫助我爲什麼只通過刷新頁面來獲取更新的值。
我無法弄清楚,你可以請詳細說明它 –
的EL表達式(那種'#{}'的東西)不會除非再次渲染'rich:menuItem',否則用新值進行評估。這就是爲什麼你沒有更新它們。 –
我爲a4j添加了一個id:其中嵌入了rich:menuItem的面板並試圖重新渲染它 –