将h:inputText值传递给f:ajax监听器

时间:2014-06-02 06:27:44

标签: jsf

我正在尝试创建一个可以在一个页面上完全编辑和显示的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语法或其他方面无关。

1 个答案:

答案 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是存储新值的变量。