我想将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/