如何使用ajax监听器保存或更新单个inputText字段



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

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

这里是输入文本值的getter

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()}" />

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

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

整个结果是堆栈跟踪,显示

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

我知道有些东西需要改变getter方法,但尝试一些没有结果的组合,使值正确更新到数据库。

(我不使用任何命令按钮提交,更新只有响应按Enter在那个inputText字段。)我想要一些指导如何可以修改这个保存/更新过程是否在后台bean或jsf布局或者也许有人已经解决了类似的情况,可以分享他的解决方案。

感谢大家的建议帖子。祝大家节日愉快

首先,添加一个字段:

  String selectedSalesName;

添加setter和setter:

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

添加一个ajaxListener(ajaxbehaviuvent事件)来创建一个新的经销商或更新当前的经销商

  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);
     }
  }

当前发牌器的setter

  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()方法在这里被调用,因为这个原因你得到了属性'selectedSalesName'不可写的异常),监听器创建或更新一个新的DealerData。

祝你有一个美好的一天,很抱歉我的英语不好!

在您的inputText中绑定值是两种方式,当它被呈现时调用getter来计算值,当它被提交时(如在AJAX事件中)调用setter来为该属性在您的后台bean中设置值。所以JSF尝试调用setSelectedSalesName(String value)。JSF不能写你的属性,这意味着不能调用setter。

参见:

  • AJAX监听器未被触发

相关内容

  • 没有找到相关文章

最新更新