【问题标题】:How do I enable choosing a row of a h:dataTable using JSF 2.0?如何使用 JSF 2.0 选择 h:dataTable 的一行?
【发布时间】:2011-03-18 17:58:57
【问题描述】:

我正在使用 JSF 2.0 开始一个小项目。 我一开始就遇到问题,在第一个实现的模型的 CRUD 中。

我想做的很简单:

该页面有一些过滤器可供搜索,并使用 ajax 填充 h:dataTable 与结果。 用户现在应该选择具有他想要查看/编辑的结果的行。 但我就是找不到让线路可选择的方法。

这是我的桌子:

<h:dataTable var="aluno" value="#{alunoController.resultado}" >
  <h:column>
     #{aluno.id}
  </h:column>
  <h:column>
     #{aluno.nome}
  </h:column>
  <h:column>
     <!-- radiobutton, commandLink/Action goes gere -->
  </h:column>
</h:dataTable>

首先我尝试在每一行上都有一个单选按钮,然后我了解到我不能在表格内有一个单选组。

然后我尝试在每行的第一个单元格中设置一个单选组,并使用一点 JavaScript 处理选择。不知何故,数据绑定不起作用,我无法在我的 ManagedBean 中恢复所选模型。

所以我尝试了一个命令按钮/链接,它通过参数发送模型......不是。它只是刷新页面。

我尝试使用查询参数,发送该行的 id 并再次从数据库中获取模型,但我无法找到一种方法来判断应该在 ManagedBean 中调用哪个方法。

所以我第一次来到这里,寻求建议。我该怎么办?我错过了一些信息吗?

我只是不想相信我想做的事情太高级了。

【问题讨论】:

  • 我使用 CDI/Weld 的 ConversationScope 解决了这个问题。 dataTabel 模型不会再在请求之间丢失,因此我无法获取数据。

标签: java jsf datatable jsf-2


【解决方案1】:

我建议你使用PrimeFaces 组件。

允许您选择单行。见Show Case

【讨论】:

  • PrimeFaces 看起来很棒,我来看看。
  • 没有解决我的问题,p:dataTable 因同样的原因无法工作:表内容在请求之间丢失。尽管如此,Primefaces 仍然摇摆不定。
  • 你在bean上使用@ViewScope吗?
  • 不,直到 BalusC 回答了这个问题,我才知道@ViewScoped。
  • 当您使用@ViewScoped 进行尝试时 - 会有帮助吗?
【解决方案2】:

JSF 2.0 的方式是将托管 bean 放在视图范围内。您可以使用@ViewScoped 来做到这一点。

@ManagedBean
@ViewScoped
public class Bean {}

这样bean会为后续请求保留,在后续请求的目标视图相同时保留。

另见:

【讨论】:

  • 这比使用 CDI 容易得多,但我无法让它工作。它仅适用于 ajax 请求。这个包含 dataTable 的页面是一个搜索结果,当用户选择其中一个结果时,动作被正确触发,并且可以检索行数据,但紧接着 construtor 和 @PostConstruct 都会被调用。所以在下一页中,值为空。应该是这样吗?
  • 算了,应该是这样的。我需要将信息转发到另一个页面,所以我会坚持使用 ConversationScope。不过,感谢您提供有关 ViewScope 的提示。
猜你喜欢
  • 2016-04-05
  • 2011-11-08
  • 2010-11-12
  • 2012-06-13
  • 2015-05-27
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多