我已经花了更多时间在inputtext字段中保存或更新一些问题,我直截了当地说: 我有基本的单输入文本和一些基本的属性
<h:inputText id="name" value="#{salesController.selectedSalesName}" />
这是inputText值的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()}" />
这里是用于更新输入文本字段的后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方法需要进行一些更改,但尝试一些没有结果的组合,这样可以将corect更新为数据库。
(我不使用任何命令按钮进行提交,仅在该inputText字段中按Enter键更新响应。) 我想要一些指南如何在back-bean或jsf布局上修改这个保存/更新过程 或者也许有人已经解决了类似的情况,并且可以分享他的解决方案。
感谢大家的建议帖子。 问候和美好的一天
答案 0 :(得分:4)
首先,添加一个字段:
String selectedSalesName;
添加setter和setter:
public String getSelectedSalesName() {
return selectedSalesName;
}
public void setSelectedSalesName(String selectedSalesName) {
this.selectedSalesName = selectedSalesName;
}
添加ajaxListener(AjaxBehaviurEvent事件)以创建新的经销商或更新当前经销商
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()方法,因此你得到了属性'selectedSalesName'不可写的异常),并且监听器创建或更新新的DealerData。
祝你有个美好的一天,对不起我的英语不好意思!
答案 1 :(得分:1)
inputText
中的绑定值是双向的,当它被渲染时比调用getter来计算值,当它被提交时(如在你的AJAX事件中),为该属性调用setter来设置你的值支持豆。所以JSF试图调用setSelectedSalesName(String value)
。 JSF无法编写您的属性,这意味着无法调用setter。
另见: