【问题标题】:No results displayed in h:dataTableh:dataTable 中未显示任何结果
【发布时间】:2016-05-22 08:45:57
【问题描述】:

我在 JSF 中实现了一个小应用程序。当我在输入字段中输入数据并单击搜索按钮时,我的数据表中没有显示任何内容。它实际上应该在数据表中返回我 2 条记录。我的方法是正确的,因为我得到了控制台上显示的 2 条记录。托管 bean 从另一个 java 类调用方法 SearchShowroom。请注意,我还有一个 POJO 类。请帮助解决问题。

托管 Bean

    public List<Showroom> find() throws Exception{
    ShowroomManager sm = new ShowroomManager();
    return sm.SearchShowroom(make1);

}

JSF

<h:form>


    Enter the make of vehicle to search: 
    <h:inputText value = "#{carManagedBean.make1 }"/> <br> <br>

    <h:commandButton value = "Search" action = "#{carManagedBean.find}">

    <br> <br>


    <h:dataTable value = "#{carManagedBean }" var = "car" border = "1" width = "15%">
        <f:facet name = "header">
        <h:outputText value = "List of Showrooms"/>
        </f:facet>

        <h:column>
            <f:facet name = "header">
                <f:verbatim> Location </f:verbatim>
            </f:facet>
            <h:outputText value = "#{car.manager }"/>
        </h:column>

        <h:column>
            <f:facet name = "header">
                <f:verbatim> Manager </f:verbatim>
            </f:facet>
            <h:outputText value = "#{car.location }"/>

        </h:column>     

    </h:dataTable>
    </h:commandButton>
</h:form>

【问题讨论】:

  • 一个h:datatable INSIDE 一个p:commandButton???
  • 是的..怎么了?
  • 这是我 20 年职业生涯中从未遇到过的设计
  • 靠着上帝的恩典,你现在遇到了兄弟。
  • 按钮什么时候触发?总是?当您在数据表外部但在边界内单击时?它会渲染吗?仍然是一个奇怪的结构。请查找一些基本教程...为此使用搜索引擎

标签: jsf jsf-2 datatable


【解决方案1】:

** 用这种方式试试,如下所述... ** 作为 dataTable 的值,您应该使用使用 #find() 方法填充的对象列表。 ** 另外认为您可以查看richface 或 primeface 展示以查看(dataTable)示例

<h:form>
Enter the make of vehicle to search: 
<h:inputText value = "#{carManagedBean.make1 }"/> <br> <br>

<h:commandButton value = "Search" action = "#{carManagedBean.find}" render="yourDataTable">
</h:commandButton>
<br> <br>

<h:dataTable id="yourDataTable" value = "#{carManagedBean.listWithSearchResult }" var = "car" border = "1" width = "15%">
    <f:facet name = "header">
    <h:outputText value = "List of Showrooms"/>
    </f:facet>

    <h:column>
        <f:facet name = "header">
            <f:verbatim> Location </f:verbatim>
        </f:facet>
        <h:outputText value = "#{car.manager }"/>
    </h:column>

    <h:column>
        <f:facet name = "header">
            <f:verbatim> Manager </f:verbatim>
        </f:facet>
        <h:outputText value = "#{car.location }"/>

    </h:column>     
</h:dataTable>

【讨论】:

  • 嗨。感谢您的回复。 listWithSearchResult 方法,具体应该包含什么?
  • 在互联网上搜索基本数据表示例。如果你问这个,我现在知道你为什么在 commandButton 中放一个数据表 ;-)
  • carManagedBean.find 方法由于您的逻辑进行搜索,此搜索的结果(car.manager 和 car.location)您可以放入 List listWithSearchResult,您将使用它来展示数据表。最好使用@Kukelitje 建议或关注此mkyong_example
【解决方案2】:

你需要像下面这样设置ajax按钮:

<h:commandButton value="Search" actionListener="#{carManagedBean.find}">
 <f:ajax render="myTable"/>
</h:commandButton>

<h:dataTable id="myTable" value="#{carManagedBean}" var="car">
//your code...
</h:dataTable>

不要忘记在 dataTable 中添加一个 id,以便在单击按钮后重新显示。

PS:如果需要保持在同一页面,请使用“actionListener”。属性“action”仅在您需要加载其他页面时使用。

【讨论】:

    猜你喜欢
    • 2017-05-13
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2015-06-04
    相关资源
    最近更新 更多