代码之家  ›  专栏  ›  技术社区  ›  thomas.st

删除行的dataTable中的jsf-commandLink

  •  0
  • thomas.st  · 技术社区  · 13 年前

    我想在h:dataTable中放一个h:commandLink来删除一行。这里我有一个不起作用的代码,我希望你能帮助我。这个代码甚至不调用我的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>
    

    第一个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");
        }
    }
    

    二次备份Bean

    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    
    @ManagedBean
    @SessionScoped
    public class SecondBackingBean {
        // ...
    }
    
    2 回复  |  直到 13 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    UICommand 组件内部 UIData 组件不调用其操作,那么这通常意味着 value 的属性 UI数据 组件在显示带有表的表单的请求和随后提交表单的请求之间发生了不兼容的变化。

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

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

    另请参见:

        2
  •  0
  •   thomas.st    13 年前

    我有答案了!

    我有两个BackingBean,第一个BackingBeans需要 @会话范围 annotation,而secondBackingBean需要@ViewScoped annotation。

    非常感谢你的其他回答。

    推荐文章