繁体   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