簡體   English   中英

通過JSF中的JavaScript從bean獲取更新值

[英]Get updated value from bean through JavaScript in JSF

我在itemComp.xhtml中有一個上下文菜單,如果我單擊上下文菜單中的任何項目,將調用itemDisplay.refreshItems操作,並在此操作完成后將調用JavaScript函數showPanel()

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>

refreshItems()中,我將所有變量設置為true。

itemDisplayBean.java

private boolean 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 (即使在后備bean中將其設置為true),並且該面板未顯示。 如果我刷新頁面,那么我將從后備bean( if( #{itemDisplay.availableBags} )獲取更新的值,然后顯示為面板。任何人都可以幫助我為什么僅通過刷新頁面來獲取更新的值。

如前所述,EL表達式在頁面呈現並變為靜態文本時進行評估。

您可以使用@data ,例如:

<rich:menuItem data="#{itemDisplay.availableBags}" 
    oncomplete="showPanel('#{itemValue}', event.data)" … >

event.data將包含event.data的當前值(您甚至可以將其指向一個對象)。

編輯:在RichFaces 3.x JS參數只是data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM