我正在尝试创建一个可以在一个页面上完全编辑和显示的SQL数据表。 我正在使用jsf和一个命名bean。 我使用arraylist bean对象来存储和显示数据。
public List<RegionBean> getRegions()throws SQLException{
数据显示在inputText元素中。当我尝试使用辅助bean中的sql方法更新信息时,它无法将更新的文本添加到sql数据库。 它将简单地放置与最初显示的值相同的值。 我想要做的是让输入文本框显示数组列表中的数据值,然后在编辑后将它们存储在bean中的不同字段中。
这是我现在的代码。
<h:dataTable value="#{regionBean.regions}" var="regions"/>
<h:column>
<f:facet name="header">Region ID</f:facet>
#{regions.regionID}
</h:column>
<h:column>
<f:facet name="header">Region Description</f:facet>
<h:inputText id="des" value="#{regions.regionDescription}">
<f:ajax event="change"
listener="#{regionBean.updateText(event)}"
render="des"/>
</h:inputText>
<h:column>
<f:facet name="header">Save</f:facet>
<h:commandButton action="#{regionBeanupdate(regions.regionID)}" value="Update">
</h:commandButton>
</h:column>
我遇到的问题 UIComponent-ClientId =,Message = javax.el.PropertyNotWritableException:
在我有的豆子里
public void updateText(AjaxBehaviorEvent event)
throws AbortProcessingException { }
如何将新的输入文本框值传递给此方法,以便将其作为String存储在bean中,从而可以使用它来更新sql数据库。
请理解我熟悉sql并且我之前已经构建了几个CRUD应用程序,而且我的问题与sql语法或其他方面无关。
答案 0 :(得分:1)
从listener
移除render
和<f:ajax>
,然后将valueChangeListener
添加到<h:inputText>
。
<h:inputText value="#{regions.regionDescription}" valueChangeListener="#{region.updateText}">
<f:ajax event="change"/>
</h:inputText>
然后在你的bean中:
public void updateText(ValueChangeEvent event){
input = event.getNewValue().toString();
}
注意:input
是存储新值的变量。