【发布时间】:2013-03-19 09:09:18
【问题描述】:
我有一个包含从列表中填充的数据表的页面。该列表有许多 id,我需要将它们传递给 bean 方法并执行数据库操作。我正在使用 commandButton 的 render 属性来调用 bean 方法 (findInfo())。我需要一次将列表中的 id (myBean.testList.id) 传递给这个 bean 方法,以便我得到布尔值。首先,我不确定如何传递 id(到我的 bean 中的 findInfo 方法),其次,如果我使用标签,我最终只发送一个 ID。谁能给我一个解决方案。我试着用下面的代码来做。
我的豆子
@ManagedBean(name="myBean")
public class MyBean(){
public boolean findInfo(Integer indId){
boolean var = dataProvider.isIdPresent(indId); // database operation
if (var)
return true;
else
return false;
}
}
xhtml 页面
<h:dataTable value="#{myBean.testList}" var="t" >
<h:column>
<f:facet name="header">
<h:outputText value="Actions" />
</f:facet>
<h:commandButton value = "Add"
action = "#{someBean.loadReport}"
rendered = "#{myBean.findInfo() == false}"/>
<h:commandButton value = "View"
action = "#{someBean.loadReport}"
rendered = "#{myBean.findInfo() == true}"/>
</h:column>
<h:column>
...
</h:column>
</h:dataTable>
更新: 我试图遵循 BalusC 解释的答案(kolossus 发布的),我最终在 f:param 中将 id 作为 null 传递。有什么建议。我更新的代码:
<h:dataTable value="#{myBean.testList}" var="t" >
<h:column>
<f:facet name="header">
<h:outputText value="Actions" />
</f:facet>
<h:commandButton value = "Add"
action = "#{someBean.loadReport}"
rendered = "#{myBean.findInfo() == false}">
<f:param name="id" value="#{t.id}" />
</h:commandButton>
<h:commandButton value = "View"
action = "#{someBean.loadReport}"
rendered = "#{myBean.findInfo() == true}">
<f:param name="id" value="#{t.id}" />
</h:commandButton>
</h:column>
<h:column>
...
</h:column>
我更新的 Bean
@ManagedBean(name="myBean")
@RequestScoped
public class MyBean(){
@ManagedProperty("#{param.id}")
private Integer indId;
public boolean findInfo(){
boolean var = dataProvider.isIndIdPresent(indId);
if (var)
return true;
else
return false;
}
}
另外,我认为我不能使用 f:ViewParam,因为我在同一个视图中从数据表中调用 bean。
【问题讨论】:
-
@kolossus 我尝试根据您提到的帖子更改我的代码。但它没有用。我粘贴了我更新的代码。任何帮助表示赞赏。
-
"没用".equals("?")。 :) 参数是否返回 null?它抛出异常了吗?这些是@mona 亟待解决的问题。希望您不要忘记为
indId添加getter 和setter(我在此处的任何地方都看不到),并且您的@RequestScoped来自javax.faces.bean包。作为最后的替代方案,您可以直接在标记action = "#{someBean.loadReport(t.id)}"中传递变量,并相应地更改您的方法签名。这仅适用于使用 EL2.2 的 JSF -
f:param 返回 null 给托管 bean。我有 indId 的 getter/setter,@RequestScoped 来自 javax.faces.bean 包,但我无法在我的 bean 中获取 indId。我没有将 JSF 与 EL2.2 一起使用,因此不能选择您建议的最后一个替代方案。上面粘贴的更新代码是我现在所做的所有更改。感谢您的建议,如果您认为我应该添加更多内容,请告诉我......谢谢
-
我完全忽略了渲染条件。您的渲染条件非常复杂:它取决于在评估值时始终为 0 的值。要验证这是现在问题的根本原因,请将其删除并尝试传递参数。最终,要修复,在使用
@PostConstruct注释的方法中执行检查,并在渲染条件中使用eq运算符(而不是==)
标签: jsf-2 datatable parameter-passing