当前位置: 首页 > 面试题库 >

如何在JSF数据表中获取选定的行索引?

仰翰采
2023-03-14
问题内容

我在index.xhtml上有数据打包

<h:dataTable style="border: solid 2px black;"
    value="#{IndexBean.bookList}" var="item"
    binding="#{IndexBean.datatableBooks}">

    <h:column>
        <h:commandButton value="Edit" actionListener="#{IndexBean.editBook}">
            <f:param name="index" value="#{IndexBean.datatableBooks.rowIndex}"/>
        </h:commandButton>
    </h:column>
</h:dataTable>

我的豆子:

@ManagedBean(name="IndexBean")
@ViewScoped
public class IndexBean implements Serializable {
    private HtmlDataTable datatableBooks;

    public HtmlDataTable getDatatableBooks() {
        return datatableBooks;
    }

    public void setDatatableBooks(HtmlDataTable datatableBooks) {
        this.datatableBooks = datatableBooks;
    }

    public void editBook() throws IOException{
        int index = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("index").toString());
        System.out.println(index);
    }
}

我的问题是,即使单击不同的编辑按钮,我也总是在服务器日志中获得相同的索引。想象有一个提供给数据表的集合。我没有在bean中显示出来。

如果我将范围从ViewScope更改为RequestScope,则可以正常工作。可能是什么问题@ViewScoped?提前致谢 :)

编辑:

<h:column>
    <h:commandButton value="Edit" actionListener="#{IndexBean.editBook}" />
</h:column>
public void editBook(ActionEvent ev) throws IOException{
    if (ev.getSource() != null && ev.getSource() instanceof HtmlDataTable) {
        HtmlDataTable objHtmlDataTable = (HtmlDataTable) ev.getSource();
        System.out.println(objHtmlDataTable.getRowIndex());
    }
}

问题答案:

您已经将<h:dataTable>组件绑定到了bean。您需要做的只是:

public void editBook() throws IOException{
    int index = datatableBooks.getRowIndex(); // Actually not interesting info.
    Book book = (Book) datatableBooks.getRowData(); // This is what you want.
}

<f:param>也这里不需要。有关更多提示,请参阅本文。

更新
:我可以重现您的问题。这可能是的错误@ViewScoped。当Bean设置为时@RequestScoped,它将按预期工作。同样,当您删除组件绑定并自己从viewroot获取组件时,它会按预期工作。我已经对此提交了1658号。



 类似资料:
  • 问题内容: 有什么方法可以简化此代码,以获取提供的某一列的索引以获取特定行的索引吗?在这种情况下,索引将为,因为我要遍历第一列直到找到“ A”。感觉应该对此有一个linq解决方案,但我无法弄清楚。 问题答案: 如果使用DataTableExtensions.AsEnumerable()方法,则可以使用LINQ查询您的DataTable。然后,您可以用来确定给定谓词的索引:

  • 问题内容: 在这个项目中,我无法在控制台输出中获取是否选择了Checkbox数据。 我的代码: 它给我的输出像 但是它并不能告诉天气复选框是否处于选中状态: 我需要这样的输出: 要么 问题答案: 在以下情况下尝试此操作: 请注意 ,仅当播放器受伤时才会显示输出,否则将为空白: 选定的行:Gareth Bale(受伤) 选定的行:Gareth Bale 替换为: 选择的行:Gareth Bale t

  • 在JSF页面中,我需要显示(选定行数)的(总行数)。我可以使用rowIndexVar属性在其中一列中显示行号,但我不知道在行选择的输入文本中单独显示相同的数字。 我需要在JSF页面或托管bean中做什么才能获得所选的行号。 请在这方面帮助我。 下面是我的JSF页面

  • 问题内容: 我需要从表单获取数据。 我使用JavaScript创建表单: 那么我需要从输入字段中获取数据。 这是我的视图函数: 但我得到一个错误: 帮我从表格中获取数据。 问题答案: 从Flask的请求对象获取表单数据: 你还可以设置默认值以避免400错误,如下所示:

  • 我从上面一行中获取所有产品名称,但我只想使用map从奇数索引中获取名称。有可能吗?

  • 如何获得熊猫的行标签列表? 我有一个带有列标签和行标签的表。要返回列标签,我使用dataframe“column”属性。可以返回带有属性列的列标签列表,但我找不到行的类似属性。