У меня есть раскрывающийся список, который создается из объекта карты, который будет повторяться в зависимости от количества списка, которое я получаю от БД, например, 5 элементов из БД, он будет генерировать 5 выпадающий список для каждой строки.Отключить некоторое значение в раскрывающемся списке JSF
Я могу получить значение выпадающего списка, назначив его переменной в списке, но я хотел бы отключить определенное выбранное значение из списка.
Например, если у меня есть в раскрывающемся списке следующие элементы (1, 2, 3, 4, 5), и если для первой строки я выбираю элемент 1, то следующие списки dropdownlists будут иметь только оставшиеся предметы/выбираемый (2,3,4,5).
Я знаю, что могу использовать <p:ajax>
, но есть ли какие-либо идеи по его отключению?
<p:dataTable var="tableDefinition" id="tableDefinition" value="#{fileUploadManagedBean.theTableList}" rowIndexVar="tdi">
<p:column headerText="no" width="2%">
<h:outputText value="#{tdi + 1}" />
</p:column>
<p:column headerText="Header" width="25%">
<h:outputText value="#{tableDefinition.header}" />
</p:column>
<p:column headerText="Sample Value" width="25%">
<h:outputText value="#{tableDefinition.sampleValue}" />
</p:column>
<p:column headerText="Map Field" width="25%">
<p:selectOneMenu id="fieldList"
value="#{tableDefinition.fieldName}" style="width:150px" >
<f:selectItem itemLabel="#{msg['form.import.upload_type_select']}" itemValue="" noSelectionOption="true" />
<f:selectItems value="#{fileUploadManagedBean.fieldTypes}" />
</p:selectOneMenu>
</p:column>
</p:dataTable>
Btw просто поделиться с другими, вот что я надеваю бэк-боба:
public void doCheckList(String fieldType){
Set<String> keySet = selectedFieldTypes.keySet();
Iterator<String> iterator = keySet.iterator();
List<String> removeList = new ArrayList();
while(iterator.hasNext()){
String selectedField = iterator.next();
boolean isEqual = false;
for(int i=0;i<theTableList.size();i++){
TableDefinition tdef = theTableList.get(i);
String fieldName = tdef.getFieldName();
if(selectedField.equals(fieldName)){
isEqual = true;
}
if(i == (selectedFieldTypes.size() - 1) && !isEqual){
removeList.add(selectedField);
}
}
}
if(removeList.size()>0){
for(String fieldToRemove:removeList){
if(fieldToRemove!=null){
selectedFieldTypes.remove(fieldToRemove);
}
}
}
selectedFieldTypes.put(fieldType,fieldType);
}
public boolean isItemSelected(String fieldType) {
return selectedFieldTypes.containsKey(fieldType);
}
И вот что я изменяю для моего выбора одного из меню:
<p:selectOneMenu id="fieldList" value="#{tableDefinition.fieldName}" style="width:150px" >
<f:selectItem itemLabel="#{msg['form.import.upload_type_select']}" itemValue=" " itemDisabled="#{fileUploadManagedBean.isItemSelected(item)}" />
<f:selectItems value="#{fileUploadManagedBean.fieldTypes}" var="item" itemDisabled="#{fileUploadManagedBean.isItemSelected(item)}" />
<p:ajax onstart="showAjaxLoading();" oncomplete="hideAjaxLoading();" listener="#{fileUploadManagedBean.doCheckList(tableDefinition.fieldName)}" update=":importData" />
</p:selectOneMenu>
проблема, с которой я сталкиваюсь сейчас, заключается в том, что отключенный элемент обнаруживается как NULL в бэк-компоненте (значение не передается), даже если оно уже выбрано.
Хороший ответ, удивиться, почему это, так трудно для других, чтобы выяснить – Kukeltje
@Kukeltje: Отсутствие базового знания HTML. Один из базовых знаний HTML уже знал бы, что для этого вы должны использовать атрибут '
@BalusC Да, но с файлами taglib у вас есть codecompletion в вашей среде IDE ... и как насчет некоторого простого использования поисковой системы. Десятки хитов ... так что это не только отсутствие базовых знаний html, но и отсутствие исследований и других базовых знаний о развитии. – Kukeltje