2014-11-08 63 views
0

我有以下addService.xhtml如何从selectOneMenu组件中获取所选项目的值?

<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:p="http://primefaces.org/ui"> 

<h:head><title>Add Service</title></h:head> 
<h:body> 
    <h:form> 
     <p:outputLabel for="name" value="Service Name" /> 
     <p:inputText id="name" value="#{serviceMB.name}"></p:inputText> 

     <p:outputLabel for="categoryCompId" value="Service Category" /> 
     <p:selectOneMenu id="categoryCompId" value="#{serviceMB.selectedCategory}" > 
      <f:selectItem itemLabel="Select Category" itemValue="" noSelectionOption="true" /> 
      <f:selectItems value="#{serviceMB.categories}" var="category" itemLabel="#{category.name}" itemValue="#{category}"/> 
     </p:selectOneMenu> 
     <p:commandButton id="saveService" value="Save" action="#{serviceMB.saveServiceAndExit}"/> 
    </h:form> 
</h:body> 

而下面的托管bean

@Component 
@Controller 
@Scope(value = "request") 
@ManagedBean(name="serviceMB") 
@RequestScoped 
public class ServicesManagedBean implements Serializable { 
    private Category selectedCategory; 
    private String name; 
    public Category getSelectedCategory() { 
     return selectedCategory; 
    } 
    public void setSelectedCategory(Category selectedCategory) { 
     this.selectedCategory = selectedCategory; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public List<Category> getCategories() { 
     return categoryService.getCategories(); 
    } 

}

setSelectedCategory()方法不会被调用,selectedCategory场总是null,尽管我在<p:selectOneMenu中使用它。我的代码有什么问题吗?

我已经添加了一个转换器,但是当我使用Object selectedObject = ((HtmlSelectOneMenu) arg1).getValue();时,它也会返回null。

+0

您对管理bean类多余的注释。他们为什么在那里? – Tiny 2014-11-08 08:14:54

+0

我需要在托管bean中注入一个Spring服务bean。所以,我需要这个托管bean在Spring容器中可见。 – user3377708 2014-11-08 08:58:23

回答

0

您只能在JSF输入中传递字符串和基本类型。对于复杂的对象,你需要一个转换器

<p:selectOneMenu id="categoryCompId" value="#{serviceMB.selectedCategory}" 
    converter="categoryConverter"> 
    <f:selectItem itemLabel="Select Category" itemValue="#{null}" noSelectionOption="true" /> 
    <f:selectItems value="#{serviceMB.categories}" var="category" itemLabel="#{category.name}" itemValue="#{category}"/> 
</p:selectOneMenu> 
+0

我已经添加了一个转换器,但是当我使用Object selectedObject =((HtmlSelectOneMenu)arg1).getValue();在“getAsObject”方法中,它也返回null。 – user3377708 2014-11-08 08:10:17

+0

这不是应该如何实现转换器。看看这里:[http://stackoverflow.com/questions/8001079/how-create-a-custom-coverter-in-jsf-2](http://stackoverflow.com/questions/8001079/how-create-a -custom-coverter合JSF-2) – 2014-11-09 10:23:46

相关问题