Mojara 2.1.21,Primefaces 3.5.11,Omnifaces 1.5 我有一个保存在 Java 字符串中的文本:
this is my text with markers {1}
second row {2} ....
每个标记在 HashMap 中都有关联的值(例如 {1} => 23、{2} => 45)。我想生成 jsf 组件树,其中每个标记将替换为具有关联值的“p:inputText”字段,文本将替换为“h:outputText”。如果用户更改了输入字段中的某些内容,则当用户单击“保存”按钮时,必须将其反映在支持 bean 中。应保留文本的格式。我怎么解决这个问题?输出的 .xhtml 渲染树(使用 java 动态创建或从某些 .xhtml 代码生成)应该是:
<h:form>
<h:outputText value="this is my text with markers " />
<p:inputText value="{mybean.value1}" />
<h:outputText value="newline seconde row" />
<p:inputText value={mybean.value2} />
....
<p:button value="save" actionListener="#{mybean.save()}"/>
</h:form>
如何创建此组件树?如何将输入文本中的值绑定到支持 bean(因为所有值的数量不固定)?
编辑:我的想法:在“文本之前,占位符”对中拆分文本。使用 c:forEach 循环迭代并生成组件。
<h:form>
<c:forEach value="#{bean.pairs}" var="pair">
<h:outputText value="#{pair.text}" />
<c:if test="#{not empty pair.value}">
<p:inputText value="#{pair.value}" />
</c:if>
</c:forEach>
<p:commandButton value="save" />
</h:form>
class Pair {
String text;
int placeholderNum;
int value;
//Getter and setter
}
@SessionScoped @Named
class Bean {
public List<Pair> getPairs () { //compute pairs with a help of regex and split
//from input text, and replace the values
}
public save() {
//iterate over pairs and save the values in hashmap
}
}