如何从JSF发送List到支持Bean

时间:2010-09-30 11:02:07

标签: jsf

我在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());
    } 

1 个答案:

答案 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预加载。