仅在jsf datatable中第一次渲染列

时间:2013-09-17 07:48:21

标签: jsf

根据我的要求,我必须在datattable中显示删除按钮行的结尾,但限制仅显示第一行,而不是每行。 如何限制

belwo是我的数据表

<h:dataTable id="datatable"  value="#{relationBean.languageDTOList}" var="lang">
<h:column>
    <f:facet name="header"> Relation Type Name</f:facet>
    <h:outputText value="#{relationBean.relationName}" />
</h:column>
<h:column>
    <f:facet name="header"> Value</f:facet>
    <h:inputText />
</h:column>
<h:column>
    <f:facet name="header">language</f:facet>
    <h:outputText value="#{lang.languageName}" />
</h:column>
<h:column>
    <f:facet name="header"> Delete</f:facet>

    <p:commandLink rendered="" action="#{relationBean.deleteDataTable}" immediate="true" update="@form" process="@this">
                <h:graphicImage value="../images/delete.png"  />
                <f:setPropertyActionListener target="#{relationBean.deleteId}" value="#{var}" />
     </p:commandLink>
        </h:column>

Bean.java显示bean的内容

public List<LanguageDTO> getLanguageDTOList() {
    System.out.println("RelationBean:getLanguageDTOList:Enter");
    CountryList = new ArrayList<Country>();
    try {
        CountryList.add(countryService.getCountryByCode(city));
        List<LanguageDTO> tempLangDTOlst=new ArrayList<LanguageDTO>();
        for (Country lang : CountryList) {
            LanguageDTO languageDTO = new LanguageDTO();
            for (CountryLanguage CLang : lang.getCountryLanguage()) {
                languageDTO =  new LanguageDTO();
                languageDTO.setLanguageName(CLang.getLanguage().getLanguageName());
                languageDTO.setLanguageCode(CLang.getLanguage().getLanguageCode());
                System.out.println(CLang.getLanguage().getLanguageName());
                tempLangDTOlst.add(languageDTO);
            }

        }
        setLanguageDTOList(tempLangDTOlst);
        System.out.println("languageDTOList :"+languageDTOList);

    } catch (Exception e) {
        e.printStackTrace();
    }
    //BeanUtils.copyProperties(tempLangDTO,languageDTOList);
    System.out.println("--------------------Start -------------");
    for (LanguageDTO iterable_element : languageDTOList) {
        System.out.println(iterable_element.getLanguageName());
    }
    System.out.println("-------------------- End -------------");
    System.out.println("RelationBean:getLanguageDTOList:Exit");
    return languageDTOList;
}

2 个答案:

答案 0 :(得分:2)

通过<h:dataTable>binding绑定到视图,该UIData将引用rendered组件实例,并在0属性中检查UIData#getRowIndex()是否等于<h:dataTable binding="#{table}" ...> <h:column> <p:commandLink ... rendered="#{table.rowIndex eq 0}">

#{bean.table}

(注意:将它绑定到像{{1}}这样的bean!代码按原样完成)

另见:

答案 1 :(得分:1)

您可以测试当前元素是否与列表的第一个元素相同:

<p:commandLink rendered="#{lang eq relationBean.languageDTOList.get(0)}"> ...

仅当languageDTOListList时才有效。

如果您使用p:dataTable而不是标准的JSF DataTable,则可以使用rowIndexVar变量来测试您是否处于第一次迭代。