如何在ui:repeat中仅显示渲染的行并隐藏其他行

时间:2013-05-31 11:51:15

标签: jsf-2 facelets

我需要在搜索结果中仅显示<ui:repeat>中的选定行。这是我的代码:

<h:inputText value="#{user.lname}" required="false" class="defaultText1 c_8" title="Search   by user"></h:inputText>
<h:commandButton id="submit" name="submit"  action="#{user.retrieveMembersByName}" />

<ui:repeat id="dtable" var="u" value="#{user.getUserList()}" varStatus="status" rendered="#{not empty user.dataList}">

        <li>
        <a href="#">#{u.memberId}</a>
         <a href="#" >#{u.groupId}</a>
        <a href="#">#{u.fname}</a>
        <a href="#">#{u.mname}</a>
                </li>
</ui:repeat> 

现在它显示所有行。如果我放<ui:repeat value="#{user.dataList}">,它将只显示搜索到的单行。但是,我想显示所有行,只有当我搜索时它才会显示单行。或者我可以突出显示搜索到的行吗?

1 个答案:

答案 0 :(得分:0)

检查某些条件并显示带有附加类的元素以“突出显示”结果。如果需要,也可以更改其他元素的类,即隐藏它们。

观点:

<h:form>
    <h:inputText value="#{userBean.userName}" required="true" />
    <h:commandButton value="Search" action="#{userBean.search}" />
    <ui:fragment rendered="#{not empty userBean.userList}">
        <ul>
            <ui:repeat value="#{userBean.userList}" var="user">
                <li class="#{fn:contains(user.name, userBean.userName) ? 'highlight' : 'grayed'}"><a href="#">#{user.name}</a></li>
            </ui:repeat>
        </ul>
    </ui:fragment>
</h:form>

这可以通过带参数的EL 2.2方法调用来完成,而不是使用JSTL function

豆子:

@ManagedBean
@ViewScoped
public class UserBean implements Serializable {

    private List<User> userList;//getter
    private String userName;//getter+setter
    public String search() {
        //load data and handle exceptions, if needed, do business job
        userList = userDAO.find(userName);
    }

}