p:ajax更改事件请求返回500错误

时间:2013-06-21 09:12:15

标签: java jsf primefaces

我正在尝试使用JSF和PrimeFaces设置2个链式选择框。我在官方网站上的示例中创建了它们,但是:

  1. 当我使用新按钮进入页面时(没有要显示的现有记录),更改事件将从控制器返回500错误
  2. 当我使用编辑按钮(存在现有记录)进入页面时,更改事件不会返回500错误,但是select中的id不会映射到记录。
  3. 任何帮助将不胜感激。

    以下相关代码位:

    <?xml version="1.0" encoding="UTF-8"?>
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:o="http://omnifaces.org/ui"
                template="/WEB-INF/templates/page.xhtml">
    
    <f:metadata>
        <o:viewParam name="userUploadedWorkId" value="#{userUploadedWorkController.userUploadedWork}"
                     converter="#{userUploadedWorkConverter}"
                     converterMessage="Solicitare eronata. Va rugam sa navigati in aceasta pagina dintr-o lista de lucrari"/>
    </f:metadata>
    
    <ui:define name="bread-crumb">
        <p:menuitem value="Lucrarile mele" outcome="user-uploaded-work-list?faces-redirect=true"/>
        <p:menuitem
                value="#{userUploadedWorkController.userUploadedWork.id eq null ? 'Lucrare noua' : userUploadedWorkController.userUploadedWork.title}"
                url="#"/>
    </ui:define>
    
    <ui:define name="page-content">
    
        <h:form>
            <p:panelGrid columns="2" columnClasses="right-aligned,raw" id="user-uploaded-work-details">
                <f:facet name="header">Detalii lucrare</f:facet>
    
                <p:outputLabel value="Titlu" for="uuwTitle"/>
                <p:inputText id="uuwTitle" value="#{userUploadedWorkController.userUploadedWork.title}" required="true"
                             style="width: 400px"/>
    
    
                <p:outputLabel value="Capitol" for="chapter"/>
                <p:selectOneMenu style="width: 400px" required="true" id="chapter" value="#{userUploadedWorkController.userUploadedWork.criterion eq null?'':userUploadedWorkController.userUploadedWork.criterion.chapter.id}" effect="fade">  
                    <f:selectItem itemLabel="Select One" itemValue="" />  
                    <f:selectItems value="#{chapters}" var="ch" itemLabel="#{ch.name}" itemValue="#{ch.id}"/> 
                    <p:ajax update="uuwCriterion" listener="#{userUploadedWorkController.chapterChange}"/> 
                </p:selectOneMenu>            
    
                <p:outputLabel value="Criteriu" for="uuwCriterion"/>
                <p:selectOneMenu style="width: 400px" required="true" id="uuwCriterion" value="#{userUploadedWorkController.userUploadedWork.criterion eq null?'':userUploadedWorkController.userUploadedWork.criterion.id}" effect="fade">  
                    <f:selectItem itemLabel="Select One" itemValue="" />  
                    <f:selectItems value="#{userUploadedWorkController.criteria}" var="criterion" itemLabel="#{criterion.name}" itemValue="#{criterion.id}"/>  
                </p:selectOneMenu>     
    
    
                <f:facet name="footer">
                    <p:message for="uuwTitle"/>
                    <p:message for="uuwCriterion"/>
                    <p:message for="uuwChapter"/>
    
                    <p:commandButton action="#{userUploadedWorkController.save}" value="Salveaza atribute" process="@form"
                                     update="@form :messages" icon="ui-icon-disk"/>
                    <p:button outcome="user-uploaded-work-list?faces-redirect=true" value="Lista lucrari"
                              icon="ui-icon-arrowreturnthick-1-e"/>
                </f:facet>
            </p:panelGrid>
    
        </h:form>
    
    </ui:define>
    

    托管bean:

    @Named
    @ViewScoped
    public class UserUploadedWorkController implements Serializable {
    private static final long serialVersionUID = -4736897416993974840L;
    
    @Inject
    private OrganizationalChartService service;
    
    private UserUploadedWork userUploadedWork = new UserUploadedWork();
    
    private List<Criterion> criteria;
    
    public UserUploadedWork getUserUploadedWork() {
        return userUploadedWork;
    }
    
    public void setUserUploadedWork(UserUploadedWork userUploadedWork) {
        this.userUploadedWork = userUploadedWork;
    }
    
    @PostConstruct
    public void init() {
        criteria = service.findAllCriteria();
    }
    
    public List<Criterion> getCriteria() {
        return criteria;
    }
    
    public void setCriteria(List<Criterion> criteria) {
        this.criteria = criteria;
    }
    
    public String save() {
        userUploadedWork.setCriterion(service.findById(Criterion.class, userUploadedWork.getCriterion().getId()));
        userUploadedWork.setUser(service.findBySimpleProperty(User.class, "email", LoginController.getRequest().getUserPrincipal().getName()));
        userUploadedWork = service.merge(userUploadedWork);
        Messages.addFlashGlobalInfo("Salvare efectuata cu succes");
        return "user-uploaded-work-list?faces-redirect=true";
    }
    
    
    public void chapterChange() {
        if (userUploadedWork.getChapter() != null
                && userUploadedWork.getChapter().getId() != null) {
            criteria = service.findCriteriaByChapter(userUploadedWork.getChapter().getId());
        } else {
            criteria = new ArrayList<Criterion>();
        }
    }
    }
    

0 个答案:

没有答案