我们有一个列表显示在屏幕的面板下,其中字段可重复的所有代码都保存在不同的Facelet文件下。当我尝试基于监听器对ajax事件的操作呈现图像时,我遇到了一些问题,用ID更新图像,因为JSF正在使用<ui:repeat>
生成中间带索引的ID像这样repeatForm:repeat:2:redimage
。
这是主页:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<title>Repeat Test Demo</title>
</h:head>
<h:body>
<h:form id="repeatForm">
<ui:repeat id ="repeat" value="#{listBean.xyzList}" var="repeatListVar">
<p:panel id="genLiabPanelRender">
<ui:include src="MyScreen.xhtml" />
</p:panel>
</ui:repeat>
</h:form>
</h:body>
</html>
此Facelet可根据面板中的列表大小重复。
MyScreen.xhtml
这是包含Facelet文件:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:body class="body">
<h:panelGrid columns="4" border="0" width="90%">
<h:panelGroup style="display:block;text-align:left;width: 320px">
<h:selectBooleanCheckbox value="#{repeatListVar.primaryPolicyInd}" />
<h:outputText value="#{label.primaryCov}" />
</h:panelGroup>
<h:panelGroup style="display:block;text-align:left;width: 240px">
<h:selectBooleanCheckbox value="#{repeatListVar.abcInd1}" />
<h:outputText value="#{label.commGenLiab}" />
</h:panelGroup>
<h:panelGroup style="display:block;text-align:left;width: 180px">
<h:outputText value=" #{label.eachOccur}" style="text-align:left" />
</h:panelGroup>
<h:panelGroup style="display:block;text-align:left;width: 130px">
<p:inputMask mask="#{label.limitAmtMask}" id="genLiabEachOccAmt"
value="#{repeatListVar.a25GLEOAmt}" required="true"
style="width: 90px">
<f:ajax event="blur" render="redimage" listener="#{repeatListVar.testA25GLEOAmt}"/>
</p:inputMask>
<h:graphicImage id="redimage" url="/images/icons/redIcon.png" rendered="#{repeatListVar.testA25GLEOAmtInd}" />
</h:panelGroup>
这最终会生成<h:outputText>
的ID,如下所示:repeatForm:repeat:2:redimage
。但由于我们使用的是<f:ajax>
代码,因此我们只需指定"redimage"
即可。标签负责查找真实ID的工作。
我们在侦听器中调用一个方法,并将布尔指示符的值设置为true
或false
,默认为false
。该指标用于渲染图像。
但是当我们使用这个<f:ajax>
基于指标值渲染图像时,我收到了错误
malformedXML:在更新期间,repeatForm:repeat:2:找不到redimage
这是如何引起的,我该如何解决?
答案 0 :(得分:1)
这应该有效。我只看到两个可能的原因:
您的bean是请求作用域,不保留<ui:repeat>
值。修复bean构造函数的作业和/或将bean放在视图范围内。
您的HTML输出在语法上无效,因此会混淆负责更新HTML DOM树的JavaScript代码。您不应在包含文件中使用<html>
和<h:body>
。它将在HTML输出中重复。您只应在母版页中使用它。包含页面应如下所示:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:panelGrid columns="4" border="0" width="90%">
...
</h:panelGrid>
</ui:composition>
请勿在其中复制<html>
,<h:head>
和/或<h:body>
。