刷新JSF中另一个元素的元素呈现

时间:2016-06-02 17:17:48

标签: jsf jsf-2 primefaces ajax-update

在带有Primefaces的xhtml页面中,我想显示带有FontAwesome图标的勾号图标(fa-check)。由于icon属性可以添加到例如primefaces按钮或primefaces commandButton,我使用带有icon属性的commandButton。 我的问题是,如果我使用f:ajax render从另一个元素引用它,则会出现错误:

  

malformedXML:在更新formId期间:找不到tickIcon

我知道已经存在这类问题,但我没有解决问题。

以下是我的xhtml页面的相关部分:

    <h:form id="formId" enctype="multipart/form-data">
       <p:wizard>
          <p:tab id="tab1">
           ...
          </p:tab>
          <p:tab id="tab2">
            <p:panel>
              <p:panelGrid styleClass="ui-panelgrid-blank">
                <p:row>
                  <p:column colspan="2">
                    <p:outputLabel id="wrapperLabel" value="Select a file"
                    styleClass="wrapperLabel">
                      <h:inputFile id="fileUpload" styleClass="fileUploadButton"
                      value="#{bean.file}" required="true">
                        <f:ajax listener="#{bean.tempUpload()}"
                        render="showFileName createButton tickIcon" />
                      </h:inputFile>
                   </p:outputLabel>
                 </p:column>
                 <p:column colspan="1">
                   <p:outputLabel value="Filename: " />
                 </p:column>
                 <p:column colspan="5">
                   <p:inputText id="showFileName"
                   value="#{bean.fileName}" readonly="true" />
                 </p:column>
                 <p:column colspan="1">
                   <p:commandButton id="tickIcon" icon="fa fa-check"
                   disabled="true" styleClass="tickIcon"
                   rendered="#{bean.validFile}" />
                 </p:column>
              </p:row>
           </p:panelGrid>
         </p:panel>
      </p:tab>
    </p:wizard>
</h:form>

更具体的是h:inputFile有一个f:ajax,当文件上传完成后,它会刷新inputText字段和2个commandButtons的渲染。 validFile是一个布尔变量,在文件上传后它是真的。但是通过带有图标的commandButton,更新不起作用,而另外2个则起作用。

如果有人有更好的想法显示Fontawesome图标,那也很受欢迎。

更新

它几乎&#34;如果我用这样的方式引用commandButton就可以工作:: tickIcon,所以通过ajax组件我写这个:

<f:ajax listener="#{bean.tempUpload()}"
                            render="showFileName createButton :tickIcon" /> 

几乎,因为只有当我回到向导中的上一个选项卡然后返回时,它才有效。这些组件最初没有更新。

更新2:

现在可以使用了,我用这种方式更改了代码:

<f:ajax listener="#{bean.tempUpload()}"
                            render="@form" />

所以整个表格都会更新。

1 个答案:

答案 0 :(得分:0)

如果我理解正确你只需要给列一个id,并更新它而不是按钮。问题是您无法更新DOM中不存在的组件(通过javascript发生)。

正常&#34;技巧&#34;是将组件放在p:column并更新,但在您的情况下,我认为您也可以更新{{1}}。