JSF按钮不会向bean发送数据

时间:2013-01-26 17:40:45

标签: jsf

我有一些JSF页面和一些bean,在cae中它正在编辑curent ellement我使用update otherwice我使用保存方法。

我尝试调试并认为按钮上的方法永远不会执行

这是我的JSF页面:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<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"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    <h:head>
        <title>Manage panel</title>
    </h:head>
    <h:body>
        <h3>Add/edit patient</h3>
        <h:form>           
            <c:set var="patient" value="#{manageBean.patient}" />
            <c:choose>
                <c:when test="#{patient!=null}">
                    <p:panel id="panel1" header="Patient" style="margin-bottom:10px;">  
                        <h:panelGrid columns="2">  
                            <h:outputLabel for="name" value="First  name" />  
                            <p:inputText id="firstName" required="true" value="#{patient.firstName}" />  

                            <h:outputLabel for="name" value="Family  name" />  
                            <p:inputText id="familyName" required="true" value="#{patient.familyName}" />  

                            <h:outputLabel for="name" value="Sex" />  
                            <p:selectOneMenu id="sex" value="#{patient.sex}">  
                                <f:selectItems value="#{manageBean.sex}"/>
                            </p:selectOneMenu>  

                            <h:outputLabel for="name" value="Birthday date" />  
                            <p:calendar value="#{patient.birthdayDate}" mode="inline" id="birthdayDate"/>  

                            <h:outputLabel for="name" value="Nationality" />  
                            <p:selectOneMenu id="nationality" value="#{patient.nationality}">  
                                <f:selectItems value="#{manageBean.nationality}"/>
                            </p:selectOneMenu>  

                            <h:outputLabel for="name" value="Adress" />  
                            <p:inputText id="adress" required="true" value="#{patient.adress}" />  

                            <h:outputLabel for="name" value="Phone number" />  
                            <p:inputMask id="phoneNumber" required="true" value="#{patient.phoneNumber}" mask="(999) 999-9999"/>
                        </h:panelGrid>  
                    </p:panel>  
                    <p:commandButton value="Update" type="submit" action="#{manageBean.update(patient)}" />  
                </c:when>   
                <c:otherwise>
                    <p:panel id="panel2" header="Patient" style="margin-bottom:10px;">  
                        <h:panelGrid columns="2">  
                            <h:outputLabel for="name" value="First  name" />  
                            <p:inputText id="firstName" required="true" value="" />  

                            <h:outputLabel for="name" value="Family  name" />  
                            <p:inputText id="familyName" required="true" value="" />  

                            <h:outputLabel for="name" value="Sex" />  
                            <p:selectOneMenu id="sex" value="">  
                                <f:selectItems value="#{manageBean.sex}"/>
                            </p:selectOneMenu>  

                            <h:outputLabel for="name" value="Birthday date" />  
                            <p:calendar mode="inline" id="birthdayDate"/>  

                            <h:outputLabel for="name" value="Nationality" />  
                            <p:selectOneMenu id="nationality" value="">  
                                <f:selectItems value="#{manageBean.nationality}"/>
                            </p:selectOneMenu>  

                            <h:outputLabel for="name" value="Adress" />  
                            <p:inputText id="adress" required="true" value="" />  

                            <h:outputLabel for="name" value="Phone number" />  
                            <p:inputMask id="phoneNumber" required="true" value="" mask="(999) 999-9999"/>
                        </h:panelGrid>  
                    </p:panel>  
                    <p:commandButton value="Save" action="#{manageBean.save(firstName, familyName, sex, birthdayDate, nationality, adress, phoneNumber)}" />  
                </c:otherwise>
            </c:choose>
        </h:form>      
    </h:body>
</html>

这是我的bean方法:

   public String update(Patient patient) {       
        Session session = factory.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            session.update(patient);
            tx.commit();
        } catch (HibernateException ex) {
            if (tx != null) {
                tx.rollback();
            }
            ex.printStackTrace();
        } finally {
            session.close();
        }
        return "go_home";
    }

    public String save(String fitstName, String familyName, Sex sex, Date birthdayDate, Nationality nationallity, String adress, String phoneNumber){
        Session session = factory.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            Patient patient = new Patient();
            patient.setFirstName(fitstName);
            patient.setFamilyName(familyName);
            patient.setSex(sex);
            patient.setBirthdayDate(birthdayDate);
            patient.setNationality(nationallity);
            patient.setAdress(adress);
            patient.setPhoneNumber(phoneNumber);
            session.save(patient);            
            tx.commit();
        } catch (HibernateException ex) {
            if (tx != null) {
                tx.rollback();
            }
            ex.printStackTrace();
        } finally {
            session.close();
        }
        return "go_home";
    }

1 个答案:

答案 0 :(得分:1)

一旦你在输入标签中给出了value属性,它就会直接将给定值绑定到java类。在ur java类中创建类变量并绑定输入标记。 EX: - 在你的bean类中创建像

这样的变量
private String firstName 

并创建getter和setter方法

<f:view>

    <h3>Add/edit patient</h3>

    <h:form>           
                <p:panel id="panel1" header="Patient" style="margin-bottom:10px;">  

                    <h:panelGrid columns="2">
                        <h:outputLabel for="name" value="First  name" />
                        <p:inputText id="firstName" required="true" value="#{manageBean.firstName}" />

                        <h:outputLabel for="name" value="Family  name" />  
                        <p:inputText id="familyName" required="true" value="#{manageBean.familyName}" />  

                        <h:outputLabel for="name" value="Sex" />  
                        <p:selectOneMenu id="sex" value="#{manageBean.sex}">  
                            <f:selectItems value="#{manageBean.sex}"/>
                        </p:selectOneMenu>  

                        <h:outputLabel for="name" value="Birthday date" />  
                        <p:calendar value="#{manageBean.birthdayDate}" mode="inline" id="birthdayDate"/>  

                        <h:outputLabel for="name" value="Nationality" />  
                        <p:selectOneMenu id="nationality" value="#{manageBean.nationality}">  
                            <f:selectItems value="#{manageBean.nationality}"/>
                        </p:selectOneMenu>  

                        <h:outputLabel for="name" value="Adress" />  
                        <p:inputText id="adress" required="true" value="#{manageBean.adress}" />  

                        <h:outputLabel for="name" value="Phone number" />  
                        <p:inputMask id="phoneNumber" required="true" value="#{manageBean.phoneNumber}" mask="(999) 999-9999"/>
                    </h:panelGrid>  
                </p:panel>  
                <p:commandButton value="Update" type="submit" action="#{manageBean.update}" />  

                    </h:form> 

创建一个新的jsp页面并将这些代码复制粘贴到body标签内。 在您的java类中创建变量和getter setter方法。 Update应该是一个返回字符串的方法。