gpt4 book ai didi

jsf - 将动态表单的多个提交值映射到单个 bean 属性

转载 作者:行者123 更新时间:2023-12-04 06:56:25 24 4
gpt4 key购买 nike

我有以下 JSF 表格:

<h:form>
<ui:repeat value="#{list.categories}" var="cat">
<h:selectOneRadio id="sel1Rad" value="#{list.choose}" layout="pageDirection">
<f:selectItems value="#{list.names}"/>
</h:selectOneRadio>
</ui:repeat>
<h:commandButton id="submit" action="#{list.submit}" value="Submit"/>
</h:form>

还有一个名为 list 的组件.变量 cat被注入(inject)到组件中,由 list.getNames() 方法使用.我想要发生的是拥有 list.choose()为每个 radio 组调用。我不确定 JSF 是否可以做到这一点。每个 selectOneRadio 都有一个不同的单独方法或 selectOneMenu团体。

由于我有未知数量的类别,我不能/不想为每个可能的选择定义一个方法。

当我提交表单时,我所有的选择都在 POST 中发送,我只是不知道告诉 Seam 如何将它们发送到我的组件的正确方法。

任何帮助表示赞赏!

最佳答案

制作 #{list.choose}由当前迭代类别标识的数组、Collection 或 Map。一个 Map<String, String>其中键代表类别,值代表所选选项可能是最简单的。

这是 MCVE在这里工作。

package com.stackoverflow.q2493671;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.enterprise.context.RequestScoped;
import javax.faces.model.SelectItem;
import javax.inject.Named;

@Named
@RequestScoped
public class Bean {

private List<String> categories;
private List<String> selectItems;
private Map<String, String> selectedItemsByCategory = new HashMap<>();

@PostConstruct
public void init() {
categories = Arrays.asList("cat1", "cat2", "cat3");
selectItems = Arrays.asList("item1", "item2", "item3");
}

public void submit() {
for (Entry<String, String> entry : selectedItemsByCategory.entrySet()) {
String category = entry.getKey();
String selectedItem = entry.getValue();
System.out.println(category + "=" + selectedItem);
}
}

public List<String> getCategories() {
return categories;
}

public List<String> getSelectItems() {
return selectItems;
}

public Map<String, String> getSelectedItemsByCategory() {
return selectedItemsByCategory;
}

}

结合
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:head>
<title>SO question 2493671</title>
</h:head>
<h:body>
<h:form>
<ui:repeat value="#{bean.categories}" var="category">
<h:selectOneRadio value="#{bean.selectedItemsByCategory[category]}" layout="pageDirection">
<f:selectItems value="#{bean.selectItems}" />
</h:selectOneRadio>
</ui:repeat>
<h:commandButton value="submit" action="#{bean.submit}" />
</h:form>
</h:body>
</html>

关于jsf - 将动态表单的多个提交值映射到单个 bean 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com