1

我将 JSF 用于我的 webapp(与 EJB 结合),并将 Bootsfaces 作为 JavaScript 添加来显示模式窗口。我有一个通过数据表显示的项目列表。通过单击列表中的命令按钮,我打开了一个模式窗口,询问用户“他是否确定要删除”。该模态确认对话框有“是”和“否”。我可以在模态窗口中执行是执行按钮。但我不能这样做 #{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>
...
4

1 回答 1

1

您可以使用 ajax 来填充您的模态内容:

$.ajax({
    url : "yourPage.jsf",
    type : "POST",
    data : {
        id: "your object's id"
    },
    dataType : "html"
}).done(function(html) {
    $("#yourModal").html(html);
});

应该使用onclick您的事件调用此 ajax<h:commandButton>

当然,您需要为您的模态内容创建一个 JSF 视图。此视图将包含您的文本和您的两个按钮“是”和“否”。“否”应该只是关闭您的模式,而“是”应该调用您的 bean 操作:<h:commandButton action="#{controller.delete(item)}" />

不要忘记使用参数填充控制器itemid将数据绑定到视图。

编辑 :

我会试着给你看一个例子。

主视图(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
}
于 2014-10-22T14:34:41.607 回答