Java 从字符串模板创建JSF组件树
Mojara 2.1.21,Primefaces 3.5.11,Omnifaces 1.5 我有一个用Java字符串保存的文本:Java 从字符串模板创建JSF组件树,java,jsf,jsf-2,string-formatting,Java,Jsf,Jsf 2,String Formatting,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”。若用户更改了输入字段中的某些内容,那个么当用户
this is my text with markers {1}
second row {2} ....
每个标记在HashMap中都有相关的值(例如,{1}=>23,{2}=>45)。
我想生成jsf组件树,其中每个标记将被替换为带有关联值的“p:inputText”字段,文本将被替换为“h:outputText”。若用户更改了输入字段中的某些内容,那个么当用户单击“保存”按钮时,这些内容必须反映在支持bean中。应保留文本的格式。我怎样才能解决这个问题?output.xhtml呈现的树(使用java创建或从某些.xhtml代码生成的dynamicali)应该是:
<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
}
}
类对{
字符串文本;
int占位符num;
int值;
//接二连三
}
@SessionScoped@Named
类豆{
public List getPairs(){//compute pairs,借助regex和split
//从输入文本,并替换值
}
公共储蓄{
//迭代对并将值保存在hashmap中
}
}
@BalusC很抱歉我提出了误导性的问题。我已经对它进行了更新,使其更加清晰,并且JSF-specific.JSF不能以这种方式工作。使用Facelet模板/标记文件或以编程方式创建组件。请参阅以获得一些提示,@BalusC我在jstl的帮助下编写了一些代码。(请参阅我更新的问题)是否可以这样生成组件树?