alg*_*one 5 jsf binding map primefaces
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
我的支持豆:
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>();
}
Run Code Online (Sandbox Code Playgroud)
基本上我想要的是使用textinput框中的用户输入更新地图值.
Bal*_*usC 12
将输入值绑定到地图的方法并不完全正确.
<pou:inputText value="#{gdsiGeodataBean.actionCommand.values['reqs.name']}" required="true" requiredMessage="Input is required."/>
Run Code Online (Sandbox Code Playgroud)
您正在根据当前迭代的内容指定固定的映射键而不是动态映射键#{reqs}
.这样,所有提交的值都将以一个相同的固定映射键结束"reqs.name"
,每个键都会相互覆盖,以便您只获取映射中最后一个字段的值.
您需要删除这些单引号,使其成为一个非常动态的密钥.
<pou:inputText value="#{gdsiGeodataBean.actionCommand.values[reqs.name]}" required="true" requiredMessage="Input is required."/>
Run Code Online (Sandbox Code Playgroud)
与具体问题无关,即使这种方法在您的问题中按原样使用时,<c:forEach>
在某些情况下也会失败.例如,在复合组件或迭代JSF组件中使用时.而是<ui:repeat>
改为使用.另请参阅JSF2 Facelets中的JSTL ......有意义吗?