簡體   English   中英

使用h:selectBooleanCheckbox和c:if來獲取a的行值 <rich:datatable> -JSF

[英]Using h:selectBooleanCheckbox with c:if to obtain row value of a <rich:datatable> - JSF

我正在使用<rich:datatable>來顯示List<Map<String, String>

在下面的代碼中, spotlightPtBindingsList<Map<String, String>spotlightbindings表示每個Map<String, String> 在第一列中,我為eah行顯示一個selectBooleanCheckBox 當檢查selectBooleanCheckBox時 ,我想將與鍵“ URI”相對應的Map<String, String>的值作為參數發送給方法inserirBean.onSelectedCheckBox(uri) ,這就是為什么我將此值放置在ui:name參數中: uri 這里的問題是,當我嘗試打印inserirBean.onSelectedCheckBox(uri)中接收的值uri時 ,我沒有得到任何輸出,好像它是空的一樣。 下面是其余的代碼:

InsereDocumento.xhtml

<rich:dataTable value="#{inserirBean.spotlightPtBindings}" var="spotlightbinding">

        <rich:column>
                 <f:facet name="header">*</f:facet>
                 <ui:param name="uri" value="#{spotlightbinding['URI']}"/>

                 <h:selectBooleanCheckbox value="#{selectionBean.selected}" />

                    <c:if test="#{selectionBean.selected}">
                        #{inserirBean.onSelectedCheckBox(uri)}"
                    </c:if>

             </rich:column> 

        <c:forEach items="#{inserirBean.variableNamesPt}" var="vname">
             <rich:column>
                 <f:facet name="header">#{vname}</f:facet>
                  #{spotlightbinding[vname]}
             </rich:column> 
         </c:forEach>  


     </rich:dataTable> <br />

選擇豆

package managedBeans;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class CheckBoxSelectionBean implements Serializable {
    private transient boolean selected = false;
    private static final long serialVersionUID = 1L;

    public CheckBoxSelectionBean() {
        // TODO Auto-generated constructor stub
    }

     public boolean isSelected() {
            return selected;
        }

        public void setSelected(boolean selected) {
            this.selected = selected;
        }

}

InserirBean-我這里沒有顯示如何命名名為spotlightPtBindingList<Map<String, String>>以及如何填充List<String> variableNamesPt ,因為這是一個復雜的過程,但是我可以告訴您它們肯定是填充的我可以在屏幕上看到他們的內容。

@ManagedBean
public class InsereDocumentoBean implements Serializable {

    private static final long serialVersionUID = 1L;

        private List<String> variableNamesPt = new ArrayList<String>();
        private List<Map<String, String>> spotlightPtBindings = new ArrayList<Map<String, String>>();


         public List<String> getVariableNamesPt() {
        return variableNamesPt;
    }

    public List<Map<String, String>> getSpotlightPtBindings() {
        return this.spotlightPtBindings;
    }

          public void onSelectedCheckBox(String uri) {
        System.out.println("URI: " + uri);
    }
}

可能是什么問題? 謝謝! 我是JSF的新手,需要您的幫助!

在JSF中,呈現過程分為兩個步驟: 視圖構建時間視圖呈現時間 盡管它們在同一個文件中,但某些標記在視圖構建時生效,而某些則在渲染時生效。

<c:forEach><c:if>類的JSTL標記和所有標記處理程序 (包括<ui:param> ,請參見此處 )在視圖構建時進行評估,它們將內容添加到“最終” xml樹中,然后進行渲染由JSF。

JSF HTML標記和類似<rich:dataTable>派生類在視圖渲染時進行評估,因此, 稍后將評估數據表的var然后評估<ui:param> ,這會導致將spotlightbinding綁定到uri時未綁定。

相反,我建議您分配一個ajax偵聽器來調用該函數:

<h:selectBooleanCheckbox value="#{selectionBean.selected}">
    <f:ajax listener="#{inserirBean.onSelectedCheckBox(spotlightbinding['URI'])}" />
</h:selectBooleanCheckbox>

請注意,只要值更改,就會調用偵聽器。

暫無
暫無

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

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