如何在JSF中使用模式窗口确认操作?

如何在JSF中使用模式窗口确认操作?,jsf,myfaces,Jsf,Myfaces,我有一个JSF MyFaces数据表,它包含一个元素列表和一个带有删除按钮的列。我只想在点击删除按钮时弹出一个对话框,允许用户确认或取消操作 由于缺乏HTML5支持,我已经简化了该对话框的使用: <div id="myModal"> <h:form> <a data-dismiss="modal">Close</a> <h:commandLink action="#{somethingMagicInHe

我有一个JSF MyFaces数据表,它包含一个元素列表和一个带有删除按钮的列。我只想在点击删除按钮时弹出一个对话框,允许用户确认或取消操作

由于缺乏HTML5支持,我已经简化了该对话框的使用:

<div id="myModal">
    <h:form>
        <a data-dismiss="modal">Close</a>
        <h:commandLink action="#{somethingMagicInHere?}">Confirm</h:commandLink>
    </h:form>
</div>
因此,简而言之,jQuery在加载页面时执行,并使用class call modal获取所有元素,并为它们设置onclick,以便它们显示id为myModal的组件,这当然是模态窗口。我继承了这种工作方式,不想改变它,但任何解决方案或想法都会有所帮助

我可以在dataTable中直接使用commandLink,它可以从视图中访问actionToPerformelement,但当然不会触发模式。因此,考虑到这种结构,我看到的主要问题是,单击Delete按钮后,如何将dataTable中正在迭代的元素发送到modal?我不介意解决方案是否使用Ajax


任何输入都会有帮助。谢谢。

好的,这是一个丑陋但有效的解决方案,它不需要我重构所有视图和托管bean。简而言之:我添加了一个隐藏的输入字段,它将在模态表单中存储要删除的元素的id。在datatable中,我所做的就是在单击按钮并触发模式后设置隐藏输入字段的值。然后用刚刚更新的值填充模态

我的简化模型:

<div id="myModal">
    <h:form id="myForm">
        <h:inputHidden value="#{bean.elementIdInModal}" id="elementIdInModal"/>
        <a data-dismiss="modal">Close</a>
        <h:commandLink action="#{bean[actionToPerform]}">Confirm</h:commandLink>
    </h:form>
</div>

缺乏HTML5支持?嗯?你的代码已经是HTML5语法?@BalucC除非我遗漏了什么,否则我不能使用和添加data-*HTML5属性。好了,我必须创建一个新的渲染器才能工作。这就是为什么我要用“你到底需要什么”来代替?我不需要它。但由于这是一个JSF项目,我认为将所有内容都转换成JSF是一个好主意。在这种情况下,这样做似乎并不关键,因为它似乎只是一个链接,根据数据属性分配了一些jQuery代码。无论如何,我认为使用纯HTML或JSF呈现一个问题与问题本身无关。
@ManagedBean(name = "bean")
@RequestScoped
public class ElementClassBean {
    ...

    public String actionToPerform(ElementClass e) {
        MyBusinessLogicModel.getInstance().deleteElement(e);
    }
}
<div id="myModal">
    <h:form id="myForm">
        <h:inputHidden value="#{bean.elementIdInModal}" id="elementIdInModal"/>
        <a data-dismiss="modal">Close</a>
        <h:commandLink action="#{bean[actionToPerform]}">Confirm</h:commandLink>
    </h:form>
</div>
<h:dataTable id="myDataTable" value="#{bean.elementList}" var="element">
    <h:column>
        <f:facet name="header">Actions</f:facet>
        <h:link styleClass="call-modal"
            onclick="$('#myForm\\:elementIdInModal').val(#{element.id})">
            Delete
        </h:link>
    </h:column>
</h:dataTable>
@ManagedBean(name = "bean")
@RequestScoped
public class ElementClassBean {
    private long elementIdInModal; // Ommiting getters and setters

    public void actionToPerform() {
        MyBusinessLogicModel.getInstance().deleteElement(elementIdInModal);
    }
}