在命令链接上使用ajax时,JSF 2.0,malformedXML

may*_*aya 2 ajax jsf commandlink

我试图通过commandlink在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>
Run Code Online (Sandbox Code Playgroud)

AddItem bean是RequestScoped,它有以下代码行:

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

Inshort,我想只在用户点击更改图像链接后显示t:inputFileUpload字段.我在AddItem bean中保留了一个标志editImgChange,其初始值为false,一旦用户单击更改图像链接,该标志就会更改为true.该程序转到ChangeImage()方法,但之后我得到错误

"malformedXML:更新期间:找不到j_idt30:uploadimage"

.

我也会对一个完全不同的解决方案感到高兴,为了达到同样的效果,我的设计很糟糕.

Bal*_*usC 11

render属性应指向始终呈现在HTML中的组件的ID.它就是JavaScript,它应该根据ajax响应更新/替换它的内容.但是,如果组件永远不会呈现为HTML,那么JavaScript将无法更新/替换其内容.您需要将其包装在另一个始终呈现为HTML的组件中,然后更新它.

例如

<h:panelGroup id="uploadimage">
    <t:inputFileUpload rendered ="#{addItem.editImgChange}" label="editImage" value="#{addItem.uploadedFile}" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)