我已经花了更多的时间来保存或更新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监听器未被触发