我正在尝试创建一个模式,以将用户选择的请求发送到电子邮件地址;但是,我在获取用户选择的请求时遇到了麻烦。我不断通过fooBean.setSelected(id)
传递空值。
<b:dataTable value="#{fooBean.newRequests}"
var="foo"
onselect="ajax:fooBean.setSelected(id)"
ondeselect="ajax:fooBean.setSelected(id)"
selectedItems="row"
selection-mode="multiple"
selectedRows="#{foo.selected}"
saveState="false">
<b:dataTableColumn label="Select">
<b:selectBooleanCheckbox value="#{foo.selected}" />
</b:dataTableColumn>
<b:dataTableColumn label="Status" value="#{foo.status}" />
<b:dataTableColumn label="Request Number"
value="#{foo.requestNumber}"
data-type="string" />
<b:dataTableColumn label="ID" value="#{foo.id}" />
<b:dataTableColumn value="#{foo.storeName}"
label="Store Name" />
</b:dataTable>
@ManagedBean(name="fooBean")
@ViewScoped
public class fooBean extends BeanBase implements Serializable {
private List<FooRecord> fooRecords = new ArrayList<FooRecord>();
private List<FooRecord> selectedFooRecords = new ArrayList<FooRecord>();
// ...
public void setSelected(String requestId) {
// This is not how I really do it, but it gives an idea
// with what I intend to do.
this.fooRecords.stream().filter(...).toggleSelection();
this.selectedFooRecords.stream().filter(...).toggleSelection();
}
}
我发现我有一个名为getSelect
而不是getSelected
的方法,因此我对其进行了修复,然后完成了这一部分。我只记得真正的问题,那就是为什么要传递空参数而不是requestId。当我通过fooBean.getSelected(String requestId)
调试时,它显示null
被作为参数传递。我什至尝试过:
<!-- Using varName.property -->
onselect="ajax:fooBean.setSelected(foo.id)"
<!-- Using just the property name -->
onselect="ajax:fooBean.setSelected(id)"
<!-- Using the loop variable -->
onselect="ajax:fooBean.setSelected(foo)"
如何将foo.id
传递给函数?
答案 0 :(得分:0)
您只能将三个参数传递给bean方法:
foo
。仅当属性selected-items
设置为rows
时,此参数才有效。警告:如果激活列或单元格选择模式,此参数仍将传递给服务器,并且似乎有效。只是该对象的每个属性都为空。typeOfSelection
。这是"row"
,"column"
或"item"
。它确定用户选择了什么。这又取决于属性selected-items,因此您几乎不必使用此参数。只需从参数列表中忽略它即可。indexes
告诉JSF bean选择了哪些行,列或单元格。请注意,在前两种情况下,这是一个单独的数字,或者-如果选择了多个项目,则是一个逗号分隔的列表。如果设置了selected-items =“ cell”,则索引是用逗号分隔的对象列表,其中包含行和列的索引。我认为indexes
或foo
是您情况下最有用的参数。
最后一句话:我们想增加更多的灵活性,但这甚至比我们还需要更多地了解JSF的内部API。说实话,我什至不确定我们是否可以在不修改JSF引擎本身的情况下传递任意bean值。如果有人知道该怎么做,请在our bug tracker上留言。
更新:
也许问题是由模态引起的。模态在加载时渲染,但是稍后在用户选择行时显示。事实是,除非您将模式的内容添加到update
属性中,否则不会自动重新渲染模式。