0

我已经实现了一个 listView,每次在这个 ListView 中添加一个新项目时,插入到 textField 中并在 DropDownChoice 中选择的值都会丢失。

下图显示了添加新 ListView 项之前和之后发生的情况:

ListViewBefore

在添加新项目之后:

ListViewAfter

我实现了下面的代码:

  var listData = workSheetDAO.listWorkSheetUser(selectedUser, beginDate, endDate)

  var lbPeriodTotal = new Label("periodTotal")
  lbPeriodTotal.setOutputMarkupId(true)
  add(lbPeriodTotal)

  add(new ListView[WorkSheet]("listWorkSheet", listData) {

    override protected def onBeforeRender() {
      super.onBeforeRender()
    }

    def populateItem(item: ListItem[WorkSheet]) = {
      var workSheet = item.getModelObject()

      item.add(new LinkDate("initDate", workSheet, 1))
      item.add(new LinkDate("endDate", workSheet, 1))

      item.add(new TextField("description"))

      val listCustomer: java.util.List[Customer] = customerDAO.listCustomers

      item.add(new DropDownChoice("customerSelection", listCustomer, new ChoiceRenderer[Customer]("id")))

      if (workSheet.endDate == None) {
        item.add(new Label("total", ""))
      } else {
        var period = new Period(workSheet.initDate, workSheet.endDate.get)
        periodTotal = periodTotal.plus(period)
        lbPeriodTotal.setDefaultModel(new Model(periodTotal.toPeriod().normalizedStandard().toString(getFormatter())))
        period = period.normalizedStandard()
        item.add(new Label("total", period.toString(getFormatter())))
      }         

   } 
}

private class LinkDate(id: String, workSheet: WorkSheet, type: Int) extends Link[String](id) {

  setEnabled(false)
  add(new Label("label", new Model[String]() {
    override def getObject(): String = {
      var result = ""
      if (type == 1) {
          result = workSheet.initDate.toString("dd/MM/YYYY HH:mm:ss")
      } else 
          result = workSheet.endDate.toString("dd/MM/YYYY HH:mm:ss")
      return result
    }
  }))

  def onClick() {}
}

唯一保留的值是标签的值。

拜托,有人可以帮助我,谢谢

4

1 回答 1

2

将新项目添加到列表后,您会刷新它,因此所有未保存的值都将丢失。在您的情况下,将执行以下操作:

首先,保存更改数据(onblur/onchange 或使用按钮“保存”)。

其次,在填充时绑定描述和客户选择,如下所示:

new TextField("description", new PropertyModel(obj, "description"))
new DropDownChoice("customerSelection", new PropertyModel(obj, "customer"), listCustomer, new ChoiceRenderer[Customer]("id")))
于 2013-05-06T06:33:32.097 回答