我想将h:commandLink放在h:dataTable中以删除单个行。在这里,我有一个无效的代码,希望您能对我有所帮助。这段代码甚至都没有调用我的delete方法。
h:dataTable的数据来自数据库。

XHTML

        <h:form>
            <div class="center">
                <h:dataTable id="list" value="#{firstBackingBean.list}"
                    var="first" styleClass="center">

                    <!-- other columns (take data from firstBackingBean) -->

                    <h:column>
                        <f:facet name="header" />
                        <h:commandLink value="delete" action="#{secondBackingBean.delete}" >
                            <f:ajax execute="@form" render="list" />
                            <f:param name="id" value="#{first.id}"/>
                        </h:commandLink>
                    </h:column>
                </h:dataTable>
            </div>
        </h:form>


FirstBackingBean

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class FirstBackingBean {
    public void delete() {
        System.out.println("\nBUTTON CLICKED\n");
    }
}


SecondBackingBean

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class SecondBackingBean {
    // ...
}

最佳答案

UICommand组件内的UIData组件不调用其动作时,通常意味着value组件的UIData属性背后的模型在显示表单的请求与显示请求之间不兼容。表格以及随后提交表格的请求。

如果支持bean是请求范围的,并且模型是基于请求范围的变量(例如request参数)进行了预初始化的,则可能会发生这种情况,在表单提交请求期间该变量不再存在。

将bean放置在视图范围内应该对其进行修复。

也可以看看:


commandButton/commandLink/ajax action/listener method not invoked or input value not updated
How can I pass selected row to commandLink inside dataTable?

关于java - jsf-dataTable中的CommandLink用于删除行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12587828/

10-10 11:35