0

我想将 ah:commandLink 放入 ah:dataTable 以删除单行。在这里,我有一个不起作用的代码,希望您能帮助我。这段代码甚至没有调用我的删除方法。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>

第一个BackingBean

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

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

第二个BackingBean

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

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

2 回答 2

3

UICommand组件内部的UIData组件不调用它的动作时,往往意味着组件value属性背后的模型在UIData表格显示请求和后续提交表单请求之间发生了不兼容的变化。

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

将 bean 放在视图范围内应该可以修复它。

也可以看看:

于 2012-09-25T17:48:47.660 回答
0

我有答案!

我有 2 个 BackingBean,第一个BackingBean 需要@SessionScoped注释,第二个BackingBean 需要@ViewScoped 注释。

非常感谢其他答案。

于 2012-09-26T11:20:56.400 回答