Jsf ActionListener在h:commandButton中不工作

Jsf ActionListener在h:commandButton中不工作,jsf,primefaces,Jsf,Primefaces,我的.xhtml文件是: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"

我的.xhtml文件是:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.org/ui"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:c="http://java.sun.com/jsp/jstl/core">

    <h:head>
        <script name="jquery/jquery.js" library="primefaces">

        </script>
    </h:head>
    <h:form>

        <h:outputScript library="js" name="calendar.js" />

        <h:outputStylesheet library="css" name="accordion.css" />

        <h:panelGrid id="panel" columns="2" cellpadding="5" border="1"
            cellspacing="1" bgcolor="#3bbab5">
            <f:facet name="header">
                <h:outputText value="REQUEST" />
            </f:facet>

            <h:outputLabel for="title" value="TITLE" style="font-weight:bold" />
            <p:inputText id="title" required="true" style="width: 97%"
                value="#{requestBean.tRequest.title}" />

            <h:outputLabel for="description" value="DESC"
                style="font-weight:bold" />
            <p:inputTextarea id="description" rows="5" cols="30" maxlength="4000"
                style="width: 97%" autoResize="false" value="#{requestBean.tRequest.description}"/>

            <b>EVENT TYPE</b>
            <h:selectOneMenu value="#{editEventTypeBean.selectedEventType}"
                required="true" panelStyle="width:150px" effect="fade" var="t"
                style="width:97%" filter="true" filterMatchMode="startsWith">
                <f:selectItem itemLabel="SELECT TYPE" itemValue="" />
                <f:selectItems value="#{editEventTypeBean.eventTypeModel}"
                    var="eventType" itemLabel="#{eventType.eventTypeName}"
                    itemValue="#{eventType}" />
            </h:selectOneMenu>

            <h:outputText style="vertical-align: top; font-weight:bold;"
                value="Детайли" />
            <p:accordionPanel style="border:1px solid; width:500px">
                <p:tab title="ADD FILTERS">

                    <p:selectManyCheckbox id="chkbox1"
                        value="#{filterTypeBean.selectedFilterTypes}"
                        layout="pageDirection">
                        <f:selectItems var="checkbox"
                            value="#{filterTypeBean.listBooleanFilterTypes()}"
                            itemLabel="#{checkbox.filterTypeName}" itemValue="#{checkbox.id}"
                            required="true" requiredMessage="check at least one checkbox" />
                    </p:selectManyCheckbox>
                    <h:message for="chkbox1" style="color:red" />


                    <h:panelGrid id="panel2" columns="2" cellpadding="5">
                        <c:forEach items="${filterTypeBean.listTextFilterTypes()}"
                            var="inputBoxes">
                            <h:outputText value="${inputBoxes.filterTypeName}"
                                style="width: 100px; white-space: normal; border: 3px" />
                            <h:inputText />
                        </c:forEach>

                        <h:outputText
                            value="${filterTypeBean.listDateFilterType().getFilterTypeName()}"
                            style="width: 100px; white-space: normal; border: 3px" />
                        <p:calendar id="cal" value="#{calendarBean.date}" mode="popup"
                            showOn="button" locale="bg" navigator="true" pattern="dd.mm.yyyy"
                            style="width: 1px" />
                    </h:panelGrid>

                </p:tab>

            </p:accordionPanel>



            <f:facet name="footer">
                <h:panelGroup style="display:block; text-align:center">
                    <h:commandButton value="SAVE" id="saveBtn"
                        actionListener="#{requestBean.addRequest()}"/>
                </h:panelGroup>
            </f:facet>


        </h:panelGrid>

    </h:form>

</html>

事件类型
我的bean中的addRequest()方法没有被调用

下面是bean的一部分:

 @ManagedBean(name = "requestBean")
    @SessionScoped
    public class RequestBean implements Serializable {
    ...
    public void addRequest() {
            System.out.println("RequestBean " );
            EntityManager em = HibernateUtil.getEntityManager();
            em.getTransaction().begin();

            System.out.println("request: " + tRequest.getTitle());
            TRequest newRequest = new TRequest(tRequest);

            System.out.println("newRequest: " + newRequest);

            newRequest.setRequestDate(new Date());

            Query q = em.createQuery("select u from TUser u");
            List<TUser> usersList = q.getResultList();
            for (TUser user : usersList) {
                System.out.println("User: " + user);
            }

            TUser author1 = new TUser();
            for (TUser tUser : usersList) {
                if (tUser.getId() == (Long.valueOf(2)))
                    author1 = tUser;
            }

            System.out.println("Author: " + author1.getName()); 

            newRequest.setAuthor(author1);
            try {
                em.persist(newRequest);
            } catch (Exception e) {
                System.out.println("Exception: " + e);
            }
            em.getTransaction().commit();
        }
@ManagedBean(name=“requestBean”)
@会议范围
公共类RequestBean实现了可序列化{
...
public void addRequest(){
System.out.println(“RequestBean”);
EntityManager em=HibernateUtil.getEntityManager();
em.getTransaction().begin();
System.out.println(“请求:+tRequest.getTitle());
TRequest newRequest=新的TRequest(TRequest);
System.out.println(“newRequest:+newRequest”);
setRequestDate(newDate());
Query q=em.createQuery(“从TUser u中选择u”);
List usersList=q.getResultList();
for(TUser用户:usersList){
System.out.println(“用户:“+User”);
}
TUser author1=新TUser();
for(TUser-TUser:usersList){
if(tUser.getId()==(Long.valueOf(2)))
author1=tUser;
}
System.out.println(“作者:+author1.getName());
newRequest.setAuthor(author1);
试一试{
em.persist(newRequest);
}捕获(例外e){
System.out.println(“异常:+e”);
}
em.getTransaction().commit();
}
我创建了一个新的.xhtml文件,只是为了测试,它可以正常工作,但在第一个文件中找不到问题

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jsp/jstl/core">

    <h:head>
        <script name="jquery/jquery.js" library="primefaces">

        </script>
    </h:head>
    <h:form>


        <h:outputLabel for="title" value="Заглавие " style="font-weight:bold" />
        <p:inputText id="title" required="true" style="width: 97%"
            value="#{requestBean.tRequest.title}" />

        <h:outputLabel for="description" value="Описание"
            style="font-weight:bold" />
        <p:inputTextarea id="description" rows="5" cols="30" maxlength="4000"
            style="width: 97%" autoResize="false"
            value="#{requestBean.tRequest.description}" />


        <h:commandButton value="Запази" id="saveBtn"
            actionListener="#{requestBean.addRequest()}" />

    </h:form>

    </html>

感谢您的帮助!

我添加了一个转换器:

<h:selectOneMenu value="#{requestBean.selectedEventType}" required="true"
            panelStyle="width:150px" effect="fade" var="t" style="width:97%"
            filter="true" filterMatchMode="startsWith">
            <f:selectItem itemLabel="Избери тип" itemValue="#{null}" />
            <f:selectItems value="#{eventTypeBean.selectItems}" var="eventType"
                itemLabel="#{eventType.eventTypeName}" itemValue="#{eventType}" />

            <f:converter converterId="tEventTypeConverter" />

        </h:selectOneMenu>

请尝试添加一个
,并在单击按钮后进行更新。查看您是否有任何错误。我在前面输入了错误,它给了我以下错误:为“null Converter”设置值“TEventType[id=9,eventTypeName=Team Building,eventTypeDesc=null]”时发生了转换错误。现在,请相应地修复它:)您知道如何修复:{0}:发生转换错误。当未选择任何内容时?
@PostConstruct
public void init() {
    System.out.println("PostConstructor!!!");
    EntityManager em = HibernateUtil.getEntityManager();
    Query q = em.createQuery("select u from TEventType u");
    listTEventTypes = q.getResultList();

    tEventTypeMap = new LinkedHashMap<Long, TEventType>();
    for (TEventType eventType : listTEventTypes) {
        tEventTypeMap.put(eventType.getId(), eventType);
    }

    selectItems = new ArrayList<SelectItem>();
    for (TEventType tEventType : list()) {
        selectItems.add(new SelectItem(tEventType, tEventType
                .getEventTypeName()));
    }
    }


    private static Map<Long, TEventType> tEventTypeMap;

    public TEventType find(String key) {
        Long keyToLong = Long.valueOf(key);
        return tEventTypeMap.get(keyToLong);
    }

    public List<TEventType> list() {
        return new ArrayList<TEventType>(tEventTypeMap.values());
    }

    public Map<Long, TEventType> map() {
        return tEventTypeMap;
    }

    public TEventType getSelectedItem() {
        return selectedItem;
    }

    public void setSelectedItem(TEventType selectedItem) {
        this.selectedItem = selectedItem;
    }

    public List<SelectItem> getSelectItems() {
        return selectItems;
    }
public class TEventTypeConverter implements Converter {

    private static EventTypeBean eventType = new EventTypeBean();

    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        if (value == null || value.isEmpty()) {
            return null;
        }

        if (!value.matches("\\d+")) {
            throw new ConverterException("The value is not a valid ID number: "
                    + value);
        }

        System.out.println ("Value id: " + value);
        return eventType.find(value);

    }


    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        if (value == null) {
            return null; // Or an empty string, can also.
        }

        if (!(value instanceof TEventType)) {
            throw new ConverterException("The value is not a valid TEventType: "
                    + value);
        }

        Long id = ((TEventType) value).getId();
        return (id != null) ? String.valueOf(id) : null;
    }
}