Jsf 如何管理下拉列表之间的依赖关系?
我正在使用JSF2.0。我有三个下拉列表:Jsf 如何管理下拉列表之间的依赖关系?,jsf,jsf-2,Jsf,Jsf 2,我正在使用JSF2.0。我有三个下拉列表: 主下拉菜单 儿童跌打 儿童下拉菜单 需要强制执行的业务规则是: 每当masterDropDown更改时,我需要填充childDropDownA和childDropDownB childDropDownA和childDropDownB的内容相同,只是当用户从childDropDownA中选择某个内容时,childDropDownB应该有其旧内容,但用户在childDropDownA中选择的内容除外。当用户首先选择childDropDownB时,同样的规则
豆角
@ManagedBean
@ViewScoped
public class Bean {
private Map<String, String> ddlMasterData;
private Map<String, String> ddlChildAData;
private Map<String, String> ddlChildBData;
private String ddlMasterSelected;
private String ddlChildASelected;
private String ddlChildBSelected;
@PostConstruct
public void init() {
//fill initial values for the drop down lists...
//this is a raw idea, you must refine it
DDLService ddlService = new DDLService();
ddlMasterData = ddlService.getDDLMasterData();
//empty data for children ddls
ddlChildAData = new LinkedHashMap<String, String>();
ddlChildBData = new LinkedHashMap<String, String>();
}
public void refillChildB(AjaxBehaviorEvent event) {
//filling the children ddls
DDLService ddlService = new DDLService();
ddlChildASelected = ddlService.getDDLChildData();
//same method to fill child data on ddlChildBSelected because is same data
ddlChildBSelected = ddlService.getDDLChildData();
}
public void fillChildren(AjaxBehaviorEvent event) {
//when the user selects something from childDropDownA
//childDropDownB should have its old contents
//I assume it must be cleared, you can change this behavior though
ddlChildBData = new LinkedHashMap<String, String>();
}
public void refillChildA(AjaxBehaviorEvent event) {
//The same rule applies when the user selects childDropDownB first
//I assume it must be cleared, you can change this behavior though
ddlChildAData = new LinkedHashMap<String, String>();
}
}
@ManagedBean
@视域
公共类Bean{
私有地图数据;
私有地图;
私有地图数据;
选择私有字符串;
已选择私有字符串ddlChildASelected;
选择私有字符串;
@施工后
公共void init(){
//填写下拉列表的初始值。。。
//这是一个原始的想法,你必须改进它
DDLService DDLService=新的DDLService();
ddlMasterData=ddlService.getDDLMasterData();
//子DDL的空数据
ddlChildAData=新建LinkedHashMap();
ddlChildBData=新建LinkedHashMap();
}
公共无效重新填充儿童B(AjaxBehaviorEvent事件){
//给孩子们填饱肚子
DDLService DDLService=新的DDLService();
ddlChildASelected=ddlService.getDDLChildData();
//填充ddlChildBSelected上的子数据的方法相同,因为是相同的数据
ddlChildBSelected=ddlService.getDDLChildData();
}
公共无效填充子项(AjaxBehaviorEvent事件){
//当用户从childDropDownA中选择某个内容时
//childDropDownB应该有它的旧内容
//我认为它必须被清除,但你可以改变这种行为
ddlChildBData=新建LinkedHashMap();
}
公共无效再填充儿童(AjaxBehaviorEvent事件){
//当用户首先选择childDropDownB时,同样的规则也适用
//我认为它必须被清除,但你可以改变这种行为
ddlChildAData=新建LinkedHashMap();
}
}
普通JSF 2:
豆角
@ManagedBean
@ViewScoped
public class Bean {
private Map<String, String> ddlMasterData;
private Map<String, String> ddlChildAData;
private Map<String, String> ddlChildBData;
private String ddlMasterSelected;
private String ddlChildASelected;
private String ddlChildBSelected;
@PostConstruct
public void init() {
//fill initial values for the drop down lists...
//this is a raw idea, you must refine it
DDLService ddlService = new DDLService();
ddlMasterData = ddlService.getDDLMasterData();
//empty data for children ddls
ddlChildAData = new LinkedHashMap<String, String>();
ddlChildBData = new LinkedHashMap<String, String>();
}
public void refillChildB(AjaxBehaviorEvent event) {
//filling the children ddls
DDLService ddlService = new DDLService();
ddlChildASelected = ddlService.getDDLChildData();
//same method to fill child data on ddlChildBSelected because is same data
ddlChildBSelected = ddlService.getDDLChildData();
}
public void fillChildren(AjaxBehaviorEvent event) {
//when the user selects something from childDropDownA
//childDropDownB should have its old contents
//I assume it must be cleared, you can change this behavior though
ddlChildBData = new LinkedHashMap<String, String>();
}
public void refillChildA(AjaxBehaviorEvent event) {
//The same rule applies when the user selects childDropDownB first
//I assume it must be cleared, you can change this behavior though
ddlChildAData = new LinkedHashMap<String, String>();
}
}
@ManagedBean
@视域
公共类Bean{
私有地图数据;
私有地图;
私有地图数据;
选择私有字符串;
已选择私有字符串ddlChildASelected;
选择私有字符串;
@施工后
公共void init(){
//填写下拉列表的初始值。。。
//这是一个原始的想法,你必须改进它
DDLService DDLService=新的DDLService();
ddlMasterData=ddlService.getDDLMasterData();
//子DDL的空数据
ddlChildAData=新建LinkedHashMap();
ddlChildBData=新建LinkedHashMap();
}
公共无效重新填充儿童B(AjaxBehaviorEvent事件){
//给孩子们填饱肚子
DDLService DDLService=新的DDLService();
ddlChildASelected=ddlService.getDDLChildData();
//填充ddlChildBSelected上的子数据的方法相同,因为是相同的数据
ddlChildBSelected=ddlService.getDDLChildData();
}
公共无效填充子项(AjaxBehaviorEvent事件){
//当用户从childDropDownA中选择某个内容时
//childDropDownB应该有它的旧内容
//我认为它必须被清除,但你可以改变这种行为
ddlChildBData=新建LinkedHashMap();
}
公共无效再填充儿童(AjaxBehaviorEvent事件){
//当用户首先选择childDropDownB时,同样的规则也适用
//我认为它必须被清除,但你可以改变这种行为
ddlChildAData=新建LinkedHashMap();
}
}
呈现属性在
中起什么作用?@Inquisitive它将更新ddlChildA
组件的内容,您应该在ajax调用完成时提供要更新的组件的id。@好奇您可以找到有关
的更多信息,以及您为什么选择LinkedHashMap
而不是普通的HashMap
作为此处的数据结构?@好奇,因为它维护了元素添加到映射中的顺序。更多信息:。请注意,HashMap
只会在映射中添加项目,但您不能确定其顺序。
中的render属性起什么作用?@Inquisitive它将更新ddlChildA
组件的内容,您应该在ajax调用完成时提供要更新的组件的id。@好奇您可以找到有关
的更多信息,以及您为什么选择LinkedHashMap
而不是普通的HashMap
作为此处的数据结构?@好奇,因为它维护了元素添加到映射中的顺序。更多信息:。请注意,HashMap
只会在映射中添加项目,但您无法确定其顺序。