у меня есть таблица категорий
categoryId
catName
description
image
Я хочу заполнить <h:selectOneMenu>
itemLabel
categoryName
, а его значение — categoryId
.
Это должно быть сделано с помощью ManagedBean
как я могу это сделать ??
у меня есть таблица категорий
categoryId
catName
description
image
Я хочу заполнить <h:selectOneMenu>
itemLabel
categoryName
, а его значение — categoryId
.
Это должно быть сделано с помощью ManagedBean
как я могу это сделать ??
вы можете использовать список SelectItem для этого. вам понадобится метод, который генерирует список элементов выбора, подобных следующему, в управляемом компоненте,
public List<SelectItem> getAllCatagories(){
List<SelectItem> items = new ArrayList<SelectItem>();
List<Category> categoryList = dao.getAllCategory();
for(Category category: categotyList){
items.add(new SelectItem(category.getCategoryId(), category.getName()));
}
return items;
}
и использовать его так
<h:selectOneMenu value="#{controllerBean.selectedCategory}" >
<f:selectItems value="#{controllerBean.allCategories}"/>
</h:selectOneMenu>
Вы должны использовать тег f:selectItems
:
<h:selectOneMenu value="#{yourBean.itemValue}">
<f:selectItems value="#{yourBean.yourItems}" />
</h:selectOneMenu>
Затем YourBean
должно иметь поле Map
, хранящее значения, полученные из базы данных, где ключ карты (который я предлагаю использовать в качестве строки) является меткой, а значением является связанный объект.
Map<String,YourObject> yourItems = new HashMap<String,YourObject>();
public Map<String,YourObject> getYourItems() {
return yourItems;
}
попробуй что-нибудь вроде этого
xhtml
<h:form>
<h:panelGrid>
<h:selectOneMenu value="#{myMB.id}">
<f:selectItem itemLabel="Please select one" itemValue="#{null}" />
<f:selectItems value="#{myMB.items}" />
</h:selectOneMenu>
</h:panelGrid>
<h:commandButton action="#{myMB.go}" value="Go"/>
</h:form>
mb
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
@ManagedBean
@ViewScoped
public class MyMB implements Serializable{
private static final long serialVersionUID = 1L;
private List<SelectItem> items = new ArrayList <SelectItem> ();
private Long id;
@PostConstruct
public void init(){
SelectItem si = new SelectItem();
si.setLabel("My Label");
si.setValue(666L);
items.add(si);
}
public List<SelectItem> getItems() {
return items;
}
public void setItems(List<SelectItem> items) {
this.items = items;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public void go(){
System.out.println(id);
}
}
Вы можете просто использовать цикл для получения данных из вашего списка следующим образом:
<h:outputText value="Role :" />
<p:selectOneMenu value="#{myBean.id_Role}">
<c:forEach var="role" items="#{myBean.rolesList}">
<f:selectItem itemLabel="${role.name_Role}" itemValue="${role.id_Role}" />
</c:forEach>
</p:selectOneMenu>
И в вашем bean:
private List<Role> rolesList;
//And then fill the list from database
В моем случае я использую hibernate для получения данных из базы данных, у меня это сработало.
Я надеюсь, что это полезно!
[selectonemenu]
, который вы (правильно!) разместили на вопросе, пока не появится черное информационное окно, а затем нажмите в нем ссылку info. - person BalusC   schedule 14.12.2012