【问题标题】:JSF page doesnot work when i add selectOneMenu (prime faces)当我添加 selectOneMenu (primefaces) 时 JSF 页面不起作用
【发布时间】:2012-04-19 09:45:50
【问题描述】:

我有一个名为 Lecturer 的托管 bean。 Lecturer managed bean 包括部门之间的关系。我想显示存储在数据库中的所有部门。当我注册讲师时,我需要获得其部门。

我的讲师管理 bean。我有适当的 setter 和 getter 方法。我只是为了澄清而省略它。

public class Lecturer 
{

    private String name;
    private String surname;

    private String email;
    private String username;
    private String password;


    private List<Department> departments;

    private LecturerService lecturerService;
    private DepartmentService departmentService;
}

我的 Licturer.xhtml 文件:

<h:form>
<f:view>
<p:panelGrid columns="2">  

<f:facet name="header">Lecturer Registration Form</f:facet> 

<h:outputLabel for="name" value="Name :" />  
<p:inputText id="name" value="#{Lecturer.name}" label="Name" required="true" />

<h:outputLabel for="surname" value="Surname :" />  
<p:inputText id="surname" value="#{Lecturer.surname}" label="Surname" required="true" />

<h:outputLabel for="department" value="Department :" /> 


<p:selectOneMenu value="#{Lecturer.departments}" effect="fade" editable="true" var="p" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{Lecturer.departments}" var="lec"
itemLabel="#{lec.name}" itemValue="#{lec.name}"/>
</p:selectOneMenu>


<h:outputLabel for="email" value="Email :" />  
<p:inputText id="email" value="#{Lecturer.email}" label="Email" required="true" />

<h:outputLabel for="username" value="User Name :" />  
<p:inputText id="username" value="#{Lecturer.username}" label="Email" required="true" />

<h:outputLabel for="password" value="Password :" />  
<p:inputText id="password" value="#{Lecturer.password}" label="Password" required="true" />

<f:facet name="footer">

 <p:commandButton type="submit"
                id="lecturer"
                action="#{Lecturer.registerLecturer}"
                value="Register" icon="ui-icon-disk">

                </p:commandButton>

</f:facet>

</p:panelGrid>
</f:view>
</h:form>

我的面孔-config.xml

<managed-bean>
        <managed-bean-name>Lecturer</managed-bean-name>
        <managed-bean-class>com.studinfo.controller.Lecturer</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>

        <managed-property>
            <property-name>departmentService</property-name>
            <property-class>com.studinfo.services.DepartmentService</property-class>
            <value>#{DepartmentService}</value>
        </managed-property>

        <managed-property>
            <property-name>lecturerService</property-name>
            <property-class>com.studinfo.services.LecturerService</property-class>
            <value>#{LecturerService}</value>
        </managed-property>
    </managed-bean>

当我删除 selectOneMenu 标记时。我的页面工作正常。

对解决方案有任何想法吗?

我必须在字符串和部门类之间添加转换器吗?

【问题讨论】:

    标签: jsf primefaces selectonemenu


    【解决方案1】:

    p:selectOneMenuvalue 属性应该包含对单个部门(这是选定 部门)的引用,而不是整个列表。您需要在 bean 中为此添加一个字段,例如:

    private Department selectedDepartment
    // getter and setter
    

    然后在你的 facelet 中更改 p:selectOneMenuf:selectItems 的 value 属性:

    <p:selectOneMenu value="#{Lecturer.selectedDepartment}" effect="fade" 
                     editable="true" var="p" >
      <f:selectItem itemLabel="Select One" itemValue="" />
      <f:selectItems value="#{Lecturer.departments}" var="lec"
                     itemLabel="#{lec.name}" itemValue="#{lec}"/>
    </p:selectOneMenu>
    

    此外,您还需要一个转换器将选定的字符串映射到对象。

    【讨论】:

    • @erencan:仔细看看primefaces.org/showcase/ui/selectOneMenu.jsf(见第二个例子,它是citycities
    • @MartinK 是的,我已经看过了。我认为我的问题是缺少转换器。我尝试在我的 Department 类和 String 之间添加一个转换器。
    • 我还想显示存储在数据库中的所有部门。用户可以选择其中之一进行新讲师注册。因此,我必须在页面上使用部门列表。
    • 是的,当然。您可以在 selectItems 中将它们全部显示,但选择只是一个部门。
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    相关资源
    最近更新 更多