h:commandLink无法在dataTable中工作

Fah*_*kar 0 java jsf datatables commandlink jsf-2

在我的JSF文件中,我在开始时就在下面.

<h:form><h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/></h:form>.

通过使用这个,当我创建时,Create New Staff Account我被重新定向到我有表格的页面来创建新帐户.

但是,当我使用相同的内部时dataTable,采取行动.我还在同一页上:(

<h:dataTable var="c" value="#{newStaffMemberServiceBean.newStaffMemberDataBeanList}"
  styleClass="order-table"
  headerClass="order-table-header"
  rowClasses="order-table-odd-row,order-table-even-row"
  border="1" id="staffListDataTable" width="100%">

  <h:column>
    <f:facet name="header">
       Staff Member Name
    </f:facet>
    <h:form><h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/></h:form>
  </h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)

实际上我想要打印的是我将使用的相应工作人员的详细信息f:setPropertyActionListener.但由于上述情况不起作用,我不会继续.

请建议我哪里出错了.

更新1

newStaffMemberServiceBeanRequestScoped

@ManagedBean(name = "newStaffMemberServiceBean")
@RequestScoped
public class NewStaffMemberServiceBean {
    // some code
}
Run Code Online (Sandbox Code Playgroud)

更新2

HTML Generated如下

在外面 dataTable

<div align="right">
<form id="j_idt35" name="j_idt35" method="post" action="/adminManageStaffMember" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_idt35" value="j_idt35" />
<a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_idt35'),{'j_idt35:j_idt36':'j_idt35:j_idt36'},'');return false">Create New Staff Account</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="2664682277023387375:-3250423983171933030" autocomplete="off" />
</form>
Run Code Online (Sandbox Code Playgroud)

dataTable

<form id="staffListDataTable:0:j_idt43" name="staffListDataTable:0:j_idt43" method="post" action="/adminManageStaffMember" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="staffListDataTable:0:j_idt43" value="staffListDataTable:0:j_idt43" />
<a href="#" onclick="mojarra.jsfcljs(document.getElementById('staffListDataTable:0:j_idt43'),{'staffListDataTable:0:j_idt43:j_idt45':'staffListDataTable:0:j_idt43:j_idt45'},'');return false">Create New Staff Account</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="2664682277023387375:-3250423983171933030" autocomplete="off" />
</form>
Run Code Online (Sandbox Code Playgroud)

pra*_*mar 6

我建议您对原始代码进行一些修改.首先,不要h:form为你的每commandLink一个使用,而是使用一个表格dataTable.其次,action只有在找到触发aciton的组件时才会执行.如果您使用请求范围列表,datatable那么当视图恢复时,该列表将不存在,或者可能与用于创建视图的原始视图不匹配.您可能必须将托管bean从请求范围更改为查看范围或更高.

第三,作为建议,你可以使用h:outputLink或h:link而不是commandLink,并提供f:param来简化这一点,在这种情况下你也不需要表单.