我正在使用 Primefaces 向导组件。在一个选项卡上,我根据以前的选项卡输入(用户类型)动态创建输入框。输入框文本标签源自列表。在我的支持 bean 中,我有一个映射,其中包含作为键的输入标签和作为值的输入框输入。
单击下一步,我希望使用用户输入(对应于键)更新地图(值)
<c:forEach items="#{gdsiGeodataBean.actionCommand.fields}" var="reqs">
<h:outputLabel for="#{reqs.name}" value="#{reqs.name}:* " />
<pou:inputText value="#{gdsiGeodataBean.actionCommand.values['reqs.name']}" required="true" requiredMessage="Input is required."/>
</c:forEach>
我的支持豆:
private List<RequiredParam> fields; // +getter (no setter required)
private Map<String, String> values; // +getter (no setter required)
public CommandAction(String actionName, String actionParams, String context) {
this.actionName = actionName;
this.actionParams = actionParams;
this.contextName = context;
//Set up parameters
getRequiredParams();
getOptionalParams();
fields = getFields();
values = new HashMap<String, String>();
}
本质上我想要的是使用文本输入框中的用户输入来更新地图值。
您将输入值绑定到地图的方法并不完全正确。
<pou:inputText value="#{gdsiGeodataBean.actionCommand.values['reqs.name']}" required="true" requiredMessage="Input is required."/>
您正在指定一个fixed映射键而不是基于当前迭代的动态映射键#{reqs}
。这样,所有提交的值都将以同一个固定映射键结束"reqs.name"
,其中每个字段都会相互覆盖,以便您只能获取映射中最后一个字段的值。
您需要删除这些单引号才能使其成为真正的动态键。
<pou:inputText value="#{gdsiGeodataBean.actionCommand.values[reqs.name]}" required="true" requiredMessage="Input is required."/>
无关对于具体问题,即使这种方法在您的问题中按原样使用时会起作用,<c:forEach>
在某些情况下会失败。例如。当在复合组件或迭代 JSF 组件内部使用时。而是使用<ui:repeat>
反而。也可以看看JSF2 Facelets 中的 JSTL...有意义吗? https://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)