[richfaces-issues] [JBoss JIRA] Commented: (RF-7136) h:inputText doesn't reflect backing bean value on ajax rerendering

Denis Petrunin (JIRA) jira-events at lists.jboss.org
Wed May 13 16:32:46 EDT 2009


    [ https://jira.jboss.org/jira/browse/RF-7136?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12467364#action_12467364 ] 

Denis Petrunin commented on RF-7136:
------------------------------------

There is workaround: reset JSF components values manually. Use resetUIComponentValueRecursively( String componentId ) where componentId is form id.

    /**
     * Resets UIInput/UIData components value to un-initialized state. The given component
     * and all childs are affected recursively.
     *
     * @see <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/component/UIInput.html#resetValue()">javax.faces.component.UIInput.resetValue()</a>
     * @see <a href="http://java.sun.com/javaee/5/docs/api/javax/faces/component/UIData.html#setValue(java.lang.Object)">javax.faces.component.UIData.setValue(Object value)</a>
     *
     * @param componentId is an id of root component to reset value of and all childs recursively, can be null 
     */
    public static void resetUIComponentValueRecursively( String componentId )
    {
        if ( componentId != null ) {
            UIComponent root = FacesContext.getCurrentInstance().getViewRoot().findComponent(componentId);
            resetUIComponentValueRecursively(root);
        }
    }

    /**
     * Resets UIInput/UIData components value to un-initialized state. The given component
     * and all childs are affected recursively.
     *
     * @see <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/component/UIInput.html#resetValue()">javax.faces.component.UIInput.resetValue()</a>
     * @see <a href="http://java.sun.com/javaee/5/docs/api/javax/faces/component/UIData.html#setValue(java.lang.Object)">javax.faces.component.UIData.setValue(Object value)</a>
     *
     * @param component is a root component to reset value of and all childs recursively, can be null 
     */
    public static void resetUIComponentValueRecursively( UIComponent component )
    {
        if ( component != null ) {
            resetUIComponentValue(component);
            for ( UIComponent child : component.getChildren() )
                resetUIComponentValueRecursively(child);
        }
    }

    /**
     * Resets UIInput/UIData component value to un-initialized state.
     *
     * @see <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/component/UIInput.html#resetValue()">javax.faces.component.UIInput.resetValue()</a>
     * @see <a href="http://java.sun.com/javaee/5/docs/api/javax/faces/component/UIData.html#setValue(java.lang.Object)">javax.faces.component.UIData.setValue(Object value)</a>
     *
     * @param component to reset value of, can be null
     */
    private static void resetUIComponentValue( UIComponent component )
    {
        if ( component instanceof UIInput ) {
            ((UIInput) component).resetValue();
        } else if ( component instanceof UIData ) {
            ((UIData) component).setValue(null);
        }
    }

> h:inputText doesn't reflect backing bean value on ajax rerendering
> ------------------------------------------------------------------
>
>                 Key: RF-7136
>                 URL: https://jira.jboss.org/jira/browse/RF-7136
>             Project: RichFaces
>          Issue Type: Bug
>    Affects Versions: 3.3.0
>         Environment: RichFaces 3.3.0GA
> Mojarra JSF Implementation 1.2_12-b01-FCS
>            Reporter: Denis Petrunin
>            Assignee: Tsikhon Kuprevich
>
> 1) open edit.jsf page (see below)
> 2) input "1" into "Id" field,  click "Edit" button
> 3) make a note that "Name" field contains "First", "Note" field contains "Note-1"
> 4) clear "Name" field, click "Save" button
> 5) make a not that the error message is shown: "fmEdit:itName: Validation Error: Value is required."
> 6) input "2" into "Id" field,  click "Edit" button
> 7) make a note that "Name" field contains "Second", "Note" field still contains "Note-1"
> Expected result: "Note" field must contain "Note-2"
> I think other UIInput, UIData are affected as well.
> <<===== edit.jspx =====>>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> 	xmlns:rich="http://richfaces.org/rich"
> 	xmlns:h="http://java.sun.com/jsf/html"
> 	xmlns:a4j="http://richfaces.org/a4j"
> 	xmlns:s="http://jboss.com/products/seam/taglib">
> <head>
> </head>
> <body>
> <h:form id="fmItemSelector">
> 	<h:outputLabel value="Id" />
> 	<h:inputText value="#{bean.editingItemId}" />
> 	<a4j:commandButton value="Edit" reRender="fmEdit" />
> </h:form>
> <h:form id="fmEdit">
> 	<h:panelGrid columns="2">
> 		<h:outputLabel value="Name" />
> 		<h:inputText id="itName" value="#{bean.editingItem.name}" required="true" disabled="#{bean.editingItem == null}" />
> 		<h:outputLabel value="Note" />
> 		<h:inputText id="itNote" value="#{bean.editingItem.note}" required="true" disabled="#{bean.editingItem == null}" />
> 	</h:panelGrid>
> 	<a4j:commandButton value="Save" rendered="#{bean.editingItem != null}" action="#{bean.save}" reRender="fmItemSelector, fmEdit" />
> </h:form>
> <rich:messages />
> </body>
> </html>
> <<===== Backing bean  =====>>
> import java.util.Arrays;
> import java.util.List;
> import org.jboss.seam.ScopeType;
> import org.jboss.seam.annotations.Name;
> import org.jboss.seam.annotations.Scope;
> @Name("bean")
> @Scope(ScopeType.SESSION)
> public class Test
> {
>     private static final List<Item> model = Arrays.asList(new Item(1, "First", "Note-1"), new Item(2, "Second", "Note-2"));
>     private Integer editingItemId;
>     public Item getEditingItem()
>     {
>         if (editingItemId == null)
>             return null;
>         for (Item item : model) {
>             if (item.getId() == editingItemId)
>                 return item;
>         }
>         return null;
>     }
>     public void save()
>     {
>         editingItemId = null;
>     }
>     public Integer getEditingItemId()
>     {
>         return editingItemId;
>     }
>     public void setEditingItemId(Integer editingItemId)
>     {
>         this.editingItemId = editingItemId;
>     }
>     public static class Item
>     {
>         private int id;
>         private String name;
>         private String note;
>         public Item(int id, String name, String note)
>         {
>             this.id = id;
>             this.name = name;
>             this.note = note;
>         }
>         public int getId()
>         {
>             return id;
>         }
>         public void setId(int id)
>         {
>             this.id = id;
>         }
>         public String getName()
>         {
>             return name;
>         }
>         public void setName(String name)
>         {
>             this.name = name;
>         }
>         public String getNote()
>         {
>             return note;
>         }
>         public void setNote(String note)
>         {
>             this.note = note;
>         }
>     }
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the richfaces-issues mailing list