【问题标题】:How do I bind a inputbox values to a map value in a backing bean property when using a wizard使用向导时,如何将输入框值绑定到支持 bean 属性中的映射值
【发布时间】:2012-01-04 11:42:05
【问题描述】:

我正在使用 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>();
}

基本上我想要的是使用来自文本输入框的用户输入来更新地图值。

【问题讨论】:

  • 如你所见,我正在关注这个例子stackoverflow.com/questions/7010256/…
  • 尝试在您的托管 bean 上添加一个 FlowListener 事件并在那里验证您的地图中的值是否正在服务器端更新:flowListener="#{managedBean.onFlowListener}。如果没有发生这种情况,请确认您在回发的验证阶段没有收到任何异常或验证错误。
  • @maple_shaft 我的观点已经有了。
  • 问题是如何使用用户输入输入文本字段的内容更新值映射。 this (#{gdsiGeodataBean.actionCommand.values['reqs.name']) 只允许我在给定键(reqs.name)的情况下检索地图中的值。如何将输入绑定到支持 bean 映射中的值。

标签: jsf binding map primefaces


【解决方案1】:

您将输入值绑定到地图的方法并不完全正确。

<pou:inputText value="#{gdsiGeodataBean.actionCommand.values['reqs.name']}"  required="true" requiredMessage="Input is required."/> 

您指定的是固定映射键,而不是基于当前迭代的#{reqs} 的动态映射键。这样一来,所有提交的值都将在一个相同的固定映射键 "reqs.name" 中结束,因此每个值都会相互覆盖,因此您只能获得映射中最后一个字段的值。

您需要删除那些单引号以使其成为真正的动态键。

<pou:inputText value="#{gdsiGeodataBean.actionCommand.values[reqs.name]}"  required="true" requiredMessage="Input is required."/> 

与具体问题无关,即使这种方法在您的问题中按原样使用时有效,&lt;c:forEach&gt; 在某些情况下也会失败。例如。在复合组件或迭代 JSF 组件中使用时。而是改用&lt;ui:repeat&gt;。另见JSTL in JSF2 Facelets... makes sense?

【讨论】:

  • actionCommand.values 不会要求 getter 和 setter 真正成为绑定属性吗? OP 没有在他的代码中显示这一点,但我之所以问是因为我真的不知道,我以前从未使用过 c:forEach 组件。
  • @maple_shaft:只需要一个吸气剂getValues()。地图/列表上不需要设置器。 JSF EL 将通过在 EL 中给定的键/索引在获得的地图/列表上设置值。像这样:gdsiGeodataBean.getActionCommand().getValues().put(reqs.getName(), newValue)。这不管是在&lt;c:forEach&gt;&lt;ui:repeat&gt;等里面。
  • 谢谢你的解释,现在说得通了!
  • @BalusC,非常感谢!其作品。抱歉,我仍然没有足够的代表来投票支持您的答案,但非常感谢。
  • 不客气。但是,只要答案对解决问题最有帮助,您就可以将其标记为已接受。另见meta.stackexchange.com/questions/5234/…
猜你喜欢
  • 2010-12-28
  • 2012-04-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2014-09-06
相关资源
最近更新 更多