2

我试图在通过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>

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

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

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

“malformedXML:更新期间:j_idt30:找不到上传图像”

.

我也会对完全不同的解决方案感到满意,以达到相同的结果,以防我的设计不好。

4

1 回答 1

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>
于 2011-09-26T15:05:34.543 回答