我使用JSF作为我的webapp(结合EJB)和Bootsfaces作为JavaScript添加来显示模态窗口。我有一个通过dataTable显示的项目列表。通过单击列表中的命令按钮,我打开一个模态窗口,询问用户“他确定要删除”。该模态确认对话框为YES和NO。我可以在模态窗口中执行yes执行按钮。但是我不能做#{controller.delete(item)},因为在构建列表表时,该项只是服务器端可用。不知何故,我必须将实际选择的项目发送到模态窗口,以便在控制器调用中以某种方式设置... ???
有人有个主意吗?
<!-- looping the jsf list //-->
<h:dataTable value="#{controller.itemlist}" var="item"...
...
<!-- showing modal window //-->
<h:commandButton value="delete" action="" onClick="return false;" p:toggle-data.... />
</h:dataTable>
</h:form>
...
<!-- modal window in panel, with item not set //-->
...
<h:commandButton action="#{controller.delete(item)}" />
</h:form>
</b:panel>
...
答案 0 :(得分:1)
您可以使用ajax填充模态的内容:
$.ajax({
url : "yourPage.jsf",
type : "POST",
data : {
id: "your object's id"
},
dataType : "html"
}).done(function(html) {
$("#yourModal").html(html);
});
应在onclick
<h:commandButton>
事件调用此ajax
当然,您需要为模态内容创建一个JSF视图。此视图将包含您的文本和两个按钮&#34;是&#34;和&#34;不&#34;。 &#34;否&#34;应该只是解雇你的模态,而&#34;是&#34;应该调用你的bean动作:<h:commandButton action="#{controller.delete(item)}" />
。
请勿忘记使用item
参数填充控件id
,以便将数据绑定到您的视图。
编辑:
我试着给你举个例子。
主视图(view.xhtml):
<h:form>
<h:dataTable value="#{controller.itemlist}" var="item">
<h:column>
...
</h:column>
<h:column>
<h:commandButton value="delete" onclick="return populateModal(#{item.id}); " />
</h:column>
</h:dataTable>
</h:form>
填充模态的脚本(view.xhtml):
<script type="text/javascript">
function populateModal(id) {
$.ajax({
url: "view2.jsf",
type: "POST",
data: { id: id },
dataType: "html"
}).done(function(html) {
$("#modal").html(html);
$("#modal").show();
});
return false;
}
</script>
然后您需要查看模态的内容(view2.xhtml):
<h:form>
Delete #{testBean2.item.name} ?
<h:commandButton value="YES" action="#{testBean2.delete(testBean2.item)}" />
<h:commandButton value="NO" onclick="return closeModal();" />
</h:form>
此视图的控制器(testBean2.java):
private Item item;
@PostConstruct
public void init() {
// GET id parameter from HTTPRequest
// Populate Local Item
}
public void delete(Item item) {
// Delete your item
}