JSF 2.0, malformedXML при использовании ajax в командной ссылке - PullRequest
2 голосов
/ 26 сентября 2011

Я пытаюсь отобразить поле в форме после ajax-запроса через командную ссылку. Однако я получаю ошибку malformedXML при нажатии на ссылку.Файл xhtml выглядит следующим образом:

            <h:form>    
                .
                .
                <tr>
                    <td>Product Image*:</td>
                    <td>
                        <h:graphicImage url="#{addItem.prodFileName}" width="100" height="100"/>
                        <br /><h:commandLink  value="change image" >
                            <f:ajax event="click" render="uploadimage" execute="@this" listener="#{addItem.ChangeImage}"/>
                        </h:commandLink>
                    </td>
                </tr>

                <tr >
                    <td>
                        <t:inputFileUpload rendered ="#{addItem.editImgChange}" label="editImage" id="uploadimage" value="#{addItem.uploadedFile}" />
                        <h:messages for="prodimage"/>
                    </td>
                </tr>
                .
                .
            </h:form>

Компонент AddItem имеет RequestScoped и имеет следующие строки кода:

    @ManagedBean
    public class AddItem extends AbstractBean {
        //..
    boolean editImgChange=false;
        //...           
    public void ChangeImage(){
    this.editImgChange=true;
        }
    }

Inshort, я хочу отобразить только поле t: inputFileUploadпосле того, как пользователь нажимает на ссылку изменить изображение.Я сохранил флаг editImgChange в bean-компоненте AddItem, начальное значение которого равно false, и как только пользователь щелкает ссылку на изменение изображения, флаг изменяется на true.Программа переходит к методу ChangeImage (), но после этого я получаю ошибку

"malformedXML: Во время обновления: j_idt30: uploadimage not found" *

.

Я буду доволен и совершенно другим решением, чтобы достичь того же результата, если мой дизайн плох.

1 Ответ

11 голосов
/ 26 сентября 2011

Атрибут render должен указывать на идентификатор компонента, который всегда отображается в HTML. Именно JavaScript должен обновлять / заменять свой контент на основе ответа ajax. Но если компонент никогда не отображается в HTML, JavaScript не сможет обновить / заменить его содержимое. Вам нужно обернуть его в другой компонент, который всегда отображается в HTML, а затем обновить его.

Е.Г.

<h:panelGroup id="uploadimage">
    <t:inputFileUpload rendered ="#{addItem.editImgChange}" label="editImage" value="#{addItem.uploadedFile}" />
</h:panelGroup>
...