我想要做的事情应该非常简单。我有一个名为activityLog的多值文本字段。当各种事情发生时,该字段通过java方法设置。如果我查看后端数据,它显然是一个多值字段。
我完成了Dave Leedy的9#14笔记中的步骤,并试图在这里关注Tommy Valand的博客文章 - > http://dontpanic82.blogspot.com/2011/03/repeat-controls-and-multivalue-fields.html。似乎都不适合我。结果是它们列出了在两种情况下连接在一起的内容。
值ARE作为VECTOR返回。我可以通过获取size()和使用elementAt()隔离特定元素来验证这一点。我只是想做一个for循环来解决这个问题,但我想知道为什么它失败了。重复似乎总是给我带来麻烦。我还想为我或未来的开发人员留下直接的代码。我可能很容易找到一些容易的东西。
<xp:repeat id="repeat1" var="rowData">
<xp:this.value><![CDATA[#{javascript:document1.getItemValue("activityLog")}]]></xp:this.value>
<xp:text escape="true" id="computedField14" value="#{javascript:rowData}">
</xp:text>
</xp:repeat>
更新:Repeat控件正在读取Vector,但不会在每次迭代后自动添加新行。尝试手动添加新行是不行的,尝试过JS“/ n”&amp; “/ r”和@NewLine()
答案 0 :(得分:3)
Tim建议使用<br/>
或<xp:br />
是一种有效的方法。但请考虑在<xp:text/ >
元素中修复问题。
<xp:text />
元素默认在输出HTML中创建<span />
。默认情况下,Spans以内联方式显示,表示它们前面没有换行符。但是您可以向元素添加CSS规则,使其成为块元素而不是内联元素。使用样式标记添加此CSS:<xp:text style="display:block;" />
或包含规则{display: block}
最后一种方法是告诉该网页呈现<div />
代码而不是<span />
代码。默认情况下,DIV是块元素。这样做:<xp:text tagName="div"/>
。 (但是要小心,因为可以更改DIV和SPAN的默认行为。)
答案 1 :(得分:2)
浏览器忽略空格,除了专门用于显示空格的内部标记。在重复内部添加中断标记(<br />
)或组件(<xp:br />
),浏览器将为重复的每次迭代显示一个新行。
答案 2 :(得分:0)
有一种简单的方法来打破多值字段,你只错过了一件事。访问每一行,我添加了rowColl变量indexVar =“rowColl”,因此你可以访问它rowData [rowColl]
<xp:repeat id="repeat1" var="rowData" indexVar="rowColl">
<xp:this.value><![CDATA[#{javascript:document1.getItemValue("activityLog")}]]></xp:this.value>
<xp:text escape="true" id="computedField14" value="#{javascript:rowData[rowColl]}">
</xp:text>
</xp:repeat>