我在一个列表中有一些对象是组件,我实现了这个来显示它们:
first.xhtml:
<h:form id="sceneForm">
<c:forEach items="#{templateController.model.selectedTemplate.templatesSet.toArray()}" var="templateControls" varStatus="ind">
<ui:include src="second.xhtml"/>
</c:forEach>
</h:form>
second.xhtml:
<c:forEach items="#{templateControls.controlAttributes.toArray()}" var="controlAttributes" >
<c:choose>
<c:when test="#{controlAttributes.controlAttributeType.name == 'top'}">
<ui:param name="top" value="#{controlAttributes.value}px" />
</c:when>
<c:when test="#{controlAttributes.controlAttributeType.name == 'left'}">
<ui:param name="left" value="#{controlAttributes.value}px" />
</c:when>
<c:when test="#{controlAttributes.controlAttributeType.name == 'width'}">
<ui:param name="width" value="#{controlAttributes.value}px" />
</c:when>
<c:when test="#{controlAttributes.controlAttributeType.name == 'height'}">
<ui:param name="height" value="#{controlAttributes.value}" />
</c:when>
</c:choose>
</c:forEach>
<c:if test="#{templateControls.controlType.type == 'Button'}">
<div style="top:#{top}; left:#{left}; width:#{width}; height:#{height}px;>
<div class="gui-component-inner">
<span>#{value}</span>
<em class="helper"></em>
</div>
</div>
</c:if>
我遍历我的属性列表,并设置了一些变量,之后我用变量设置了我的组件。这工作很好,但它不是最优的。我做了一个按钮:
<p:commandButton value="Test" actionListener="#{templateController.testAction}" onstart="Utils.PrintTime()" oncomplete="Utils.PrintTime()"/>
Witch打印请求开始和请求结束时的时间,如果我删除整个<c:forEach>
,则需要0.02秒。我怎样才能通过迭代获得更好的请求时间?任何想法?
为什么我得到这个减去我不知道…
这也是我的解决方案:
我创建了一个具有top,left,width,height的对象,并在TemplateControl对象中声明了它。在页面加载时,我迭代templatecontrol。我为每个组件设置了top,left,width,height。在xhtml中,我只写:
<c:if test="#{templateControls.controlType.type == 'Button'}">
<div style="top:#{templateControls.atr.top}; left:#{templateControls.atr.left}; width:#{templateControls.atr.width}; height:#{templateControls.atr.height}px;>
<div class="gui-component-inner">
<span>#{value}</span>
<em class="helper"></em>
</div>
</div>
</c:if>
像这样,我在java中迭代开始,而不是在xhtml中,我从<c:forEach>
和<c:if>
标签中解脱出来,现在我的请求非常快。