我在JSF1.2中使用Datatable来填充从Seam组件接收的数据/使用List。我使用列表时会获取数据。但是,当我想使Datatable可编辑,以便我在JSF页面上更改的值可以发送回Seam Component / Backing Bean时,列表不会将值传递给Seam组件/ Backing Bean。
我已经尝试但我无法再将列表传递给Seam组件/ Backing Bean。
以下是代码。
JSF代码:
<h:dataTable value="#{mainbean.findCustomerlist}" var="findCustomerList">
<h:column>
<f:facet name="header">
<h:outputText value="Sr No" />
</f:facet>
<h:outputText value="#{findCustomerList.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Company Name" />
</f:facet>
<h:inputText value="#{findCustomerList.companyName}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Account Number" />
</f:facet>
<h:inputText value="#{findCustomerList.accountNumber}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Contact Number" />
</f:facet>
<h:inputText value="#{findCustomerList.contactNumber}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Contact Name" />
</f:facet>
<h:inputText value="#{findCustomerList.contactName}" />
</h:column>
<br></br>
</h:dataTable>
<h:commandButton value="Update" type="submit" action="#{mainbean.modifyCustomer(findCustomerlist)}" />
Seam Component / Backing Bean Code:
private List<Customer> findCustomerlist=null;
public List<Customer> getFindCustomerlist() {
return findCustomerlist;
}
public void setFindCustomerlist(List<Customer> findCustomerlist) {
this.findCustomerlist = findCustomerlist;
}
public void searchCustomer(ActionEvent actionEvent)
{
findCustomerlist=session.findCustomer(customerName);
}
/* The searchCustomer function works fine and it returns the list to the JSF. But when I use the modifyCustomer function to retrieve the value from JSF then it is not working.*/
public void modifyCustomer(List<Customer> findCustomerlist)
{
session.updateCustomer(findCustomerlist);
System.out.println("Inside modifyCustomer");
System.out.println(findCustomerlist.get(0).getCompanyName());
}
答案 0 :(得分:1)
我不确定Seam正在做什么,但在普通的JSF中,这是不必要的。通常,JSF已在更新模型值阶段更新了list属性。您只需将其作为本地bean属性访问。即。
<h:commandButton value="Update" type="submit" action="#{mainbean.modifyCustomer}" />
与
public void modifyCustomer()
{
session.updateCustomer(findCustomerlist);
System.out.println("Inside modifyCustomer");
System.out.println(findCustomerlist.get(0).getCompanyName());
}
应该已经足够了。
您只需要确保辅助bean保留相同的列表。当bean是请求作用域时,您到目前为止显示的代码将失败。如果您使用的是JSF 2.0,则可以将bean放在view
范围内。在JSF 1.x上,您需要将bean放在session
范围内(不推荐)或者在bean的构造函数中预加载列表,或者@PostConstruct
基于customerName
预加载。