0

我已经花了更多时间来解决 inputtext 字段中的一些保存或更新问题,我直奔主题:我有带有一些基本属性的基本单输入文本

<h:inputText id="name" value="#{salesController.selectedSalesName}" />

这是 inputText 值的吸气剂

public String getSelectedSalesName(){
    for(DealerListView dealer : dealerList){
        if(dealer.getDealerId() == getSelectedDealerId()){
            return dealer.getName();
        }
    }
    return "";  
}   

嵌套在那里我使用ajax标签

<f:ajax event="change" render="name" listener="#{salesController.updateSelectedSalesName()}" />

这是用于更新输入文本字段的返回 bean 方法

public void updateSelectedSalesName() {     

        DealerData dealDat = BeanFactory.getHotelDAOService(DealerData.class).findOne(selectedDealerId);
        dealDat.setName(name);
        BeanFactory.getHotelDAOService(DealerData.class).update(dealDat);     
}

整个结果是堆栈跟踪,它说

value="#{salesController.selectedSalesName}":属性 'selectedSalesName' 在类型 sk.hotel.web.controller.SalesController 上不可写

我知道该 getter 方法需要进行一些更改,但尝试一些没有结果的组合,这些组合可以正确更新数据库的值。

(我不使用任何命令按钮进行提交,仅在该 inputText 字段中按 Enter 时更新响应。)我想要一些指导,无论是在 back-bean 还是 jsf 布局上,或者有人已经解决了类似的情况,如何修改这个保存/更新过程,并可以分享他的解决方案。

感谢大家的建议帖子。问候和美好的一天

4

2 回答 2

4

首先,添加一个字段:

  String selectedSalesName;

添加二传手和二传手:

  public String getSelectedSalesName() {
     return selectedSalesName;
  }
  public void setSelectedSalesName(String selectedSalesName) {
     this.selectedSalesName = selectedSalesName;
  }

添加 ajaxListener(AjaxBehaviurEvent 事件) 以创建新的 Dealer 或更新当前的 Dealer

  public void ajaxListener(AjaxBehaviorEvent event) {
     Dao dao = BeanFactory.getHotelDAOService(DealerData.class)
     if (selectedDealerId == null) {
        DealarData dealerData= new DealerData();
        dealerDate.setName(getSelectedSalesName());
        dao.add(dealerData);
        setDealer(dealerData);
     } else {
        DealerData dealDat = dao.findOne(selectedDealerId);
        dealDat.setName(name);
        dao.update(dealDat);
     }
  }

当前经销商的二传手

  int selectedDealerId;
  public void setDealer(DealerData dealer) {
        selectedDealerId = dealer.getId();
        selectedSalesName = dealer.getName();
  }

和 xhtml 页面:

  <h:inputText value="#{salesController.selectedSalesName}" id="idSalesInput">
        <a4j:ajax event="keyup" listener="#{salesController.ajaxListener}" 
               execute="idSalesInput"/>
  </h:inputText>

为您要收听的事件更改“keyup”。

当你按下一个键时,监听器被调用,并且idSalesInput的值被提交(这里调用了setSelectedSalesName()方法,因此你得到了Property 'selectedSalesName' not writable exception),并且监听器创建或更新了一个新的经销商数据。

有一个美好的一天,对不起我的英语不好!

于 2013-03-01T11:45:21.997 回答
1

在你的绑定值inputText有两种方式,当它被渲染时,调用 getter 来计算值,当它被提交时(就像在你的 AJAX 事件中),调用 setter 来为该属性设置值在你的支持 bean 中。所以 JSF 尝试调用setSelectedSalesName(String value). JSF 不能写你的属性,这意味着不能调用 setter。

也可以看看:

于 2013-03-01T10:51:24.287 回答