我想在h:dataTable中放一个h:commandLink来删除一行。在这里,我有一个不起作用的代码,我希望你能帮助我。此代码甚至不会调用我的删除方法。 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 {
// ...
}
答案 0 :(得分:3)
如果UICommand
组件中的UIData
组件未调用其操作,则通常意味着value
组件的UIData
属性后面的模型具有表格显示请求与随后提交表格的请求之间不一致。
如果支持范围是请求作用域并且模型是基于请求范围的变量(例如请求参数)预初始化的,则会发生这种情况,该变量在表单提交请求期间不再存在。
将bean放在视图范围内应该修复它。
答案 1 :(得分:0)
我有答案!
我有2个BackingBeans,firstBackingBean需要 @SessionScoped 注释,而secondBackingBean需要@ViewScoped注释。
非常感谢其他答案。