JSF Datamodel和JPA父级离开导航如何?

如何解决JSF Datamodel和JPA父级离开导航如何?

| 我的Web应用程序是一个基于Java EE 5和JDK 1.6的基于JSF 2.0 / JPA的CRUD Web应用程序。在Glassfish 3.1上运行。 IDE是Netbeans 7.0。 (我不使用EJB,也不使用CDI)。 问题 我现在可以实现的是对我的实体执行CRUD。没关系对于每个实体,我都有: List.xhtml(在数据表中删除该实体的所有数据模型项) Create.xhtml(用于创建新项目的表单) View.xhtml(用于查看项目的表单) Edit.xhtml(用于编辑项目的表单) 结构体 实体包:实体。 jpa.controllers软件包:JPA控制器(Javax持久性..)。 jsf程序包:每个实体的托管bean(会话范围)。 但是主要的问题是父叶导航。我希望我的web应用程序能够与Netbeans 7.0随附的演示应用程序Agile ScrumToys进行相同的操作。或SpringFuse的演示webapp,否则: 例如:当您在中显示“作家”列表时,在最后一个“ 0”位置放了三个“ 1”以进行编辑,查看和删除所选行。 我打算做的是在同一列中添加另一个,使我可以查看与所选行相关的子对象的集合。 因此,我想显示给定WRITER编写的BOOKS列表。 作家1 ---------- *预订(一对多)关系。 当用户点击
<h:commandButton action=\"#{someManagedBean.showBooksForWriter}\" value=\"#{i18n.listBooks}\" />
将其转发到
/book/List.xhtml
(应显示所选WRITEr行的列表)。依此类推,从图书数据表的给定行中,单击“ 4”以获取给定书的参考文献列表。 @Matt给出的提示是在书籍托管bean中使用一种方法:
public showBooksForWriter(Writer writer) {
// TODO: get the selected writer
// Get the list of books for the selected writer
return \"/book/List\";  // Outcome
}
并在视图中:
<h:datatable value=\"#{writerController.items}\" var=\"w\">
.....
<h:column>
<h:commandButton action=\"#{bookController.showBooksForWriter(w}\" value=\"Show Books For Writer\"/>
</h:column>
....
</h:datatable>
但是我不知道该怎么做(DataModel疯了)。因此,如果有人可以帮助您!将不胜感激! 下面是我的代码 WRITER实体:
package entities;

import javax.persistence.*; // other imports

    @Entity
    @Table(name = \"WRITER\")
    @XmlRootElement
    @NamedQueries({
        @NamedQuery(name = \"Writer.findAll\",query = \"SELECT w FROM Writer w\"),@NamedQuery(name = \"Writer.findByWriterid\",query = \"SELECT w FROM Writer w WHERE w.writerid = :writerid\"),@NamedQuery(name = \"Writer.findByName\",query = \"SELECT w FROM Writer w WHERE w.name = :name\"),@NamedQuery(name = \"Writer.findBySurname\",query = \"SELECT w FROM Writer w WHERE w.surname = :surname\"),@NamedQuery(name = \"Writer.findByMiddlename\",query = \"SELECT w FROM Writer w WHERE w.middlename = :middlename\"),@NamedQuery(name = \"Writer.findByIsRewarded\",query = \"SELECT w FROM Writer w WHERE w.isRewarded = :isRewarded\")})
    public class Writer implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
        @NotNull
        @Column(name = \"writerid\")
        private Integer writerid;
        @Size(max = 45)
        @Column(name = \"name\")
        private String name;
        @Size(max = 45)
        @Column(name = \"surname\")
        private String surname;
        @Size(max = 45)
        @Column(name = \"middlename\")
        private String middlename;
        @Column(name = \"isRewarded\")
        private Boolean isRewarded;
        @ManyToMany(mappedBy = \"writerList\")
        private List<Topic> topicList;
        @OneToMany(cascade = CascadeType.ALL,mappedBy = \"writer\")
        private List<Evaluation> evaluationList;
        @OneToMany(cascade = CascadeType.ALL,mappedBy = \"writer\")
        private List<Book> bookList;

        public Writer() {
        }

        public Writer(Integer writerid) {
            this.writerid = writerid;
        }

        public Integer getWriterid() {
            return writerid;
        }

        public void setWriterid(Integer writerid) {
            this.writerid = writerid;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getSurname() {
            return surname;
        }

        public void setSurname(String surname) {
            this.surname = surname;
        }

        public String getMiddlename() {
            return middlename;
        }

        public void setMiddlename(String middlename) {
            this.middlename = middlename;
        }

        public Boolean getIsRewarded() {
            return isRewarded;
        }

        public void setIsRewarded(Boolean isRewarded) {
            this.isRewarded = isRewarded;
        }

        @XmlTransient
        public List<Topic> getTopicList() {
            return topicList;
        }

        public void setTopicList(List<Topic> topicList) {
            this.topicList = topicList;
        }

        @XmlTransient
        public List<Evaluation> getEvaluationList() {
            return evaluationList;
        }

        public void setEvaluationList(List<Evaluation> evaluationList) {
            this.evaluationList = evaluationList;
        }

        @XmlTransient
        public List<Book> getBookList() {
            return bookList;
        }

        public void setBookList(List<Book> bookList) {
            this.bookList = bookList;
        }

        @Override
        public int hashCode() {
            int hash = 0;
            hash += (writerid != null ? writerid.hashCode() : 0);
            return hash;
        }

        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won\'t work in the case the id fields are not set
            if (!(object instanceof Writer)) {
                return false;
            }
            Writer other = (Writer) object;
            if ((this.writerid == null && other.writerid != null) || (this.writerid != null && !this.writerid.equals(other.writerid))) {
                return false;
            }
            return true;
        }

        @Override
        public String toString() {
            return getMiddlename();
        }

    }
作家管理豆
package jsf;

import entities.Writer;
import jsf.util.JsfUtil;
import jsf.util.PaginationHelper;
import jpa.controllers.WriterJpaController;
import javax.faces.bean.ManagedBean;
//其他进口在这里
@ManagedBean(name = \"writerController\")
@SessionScoped
public class WriterController implements Serializable {

    @Resource
    private UserTransaction utx = null;
    @PersistenceUnit(unitName = \"writerPU\")
    private EntityManagerFactory emf = null;
    private Writer current;
    private DataModel items = null;
    private WriterJpaController jpaController = null;
    private PaginationHelper pagination;
    private int selectedItemIndex;

    public WriterController() {
    }

    public Writer getSelected() {
        if (current == null) {
            current = new Writer();
            selectedItemIndex = -1;
        }
        return current;
    }

    private WriterJpaController getJpaController() {
        if (jpaController == null) {
            jpaController = new WriterJpaController(utx,emf);
        }
        return jpaController;
    }

    public PaginationHelper getPagination() {
        if (pagination == null) {
            pagination = new PaginationHelper(10) {

                @Override
                public int getItemsCount() {
                    return getJpaController().getWriterCount();
                }

                @Override
                public DataModel createPageDataModel() {
                    return new ListDataModel(getJpaController().findWriterEntities(getPageSize(),getPageFirstItem()));
                }
            };
        }
        return pagination;
    }

    public String prepareList() {
        recreateModel();
        return \"List\";
    }

    public String prepareView() {
        current = (Writer) getItems().getRowData();
        selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
        return \"View\";
    }

    public String prepareCreate() {
        current = new Writer();
        selectedItemIndex = -1;
        return \"Create\";
    }

    public String create() {
        try {
            getJpaController().create(current);
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle(\"/Bundle\").getString(\"WriterCreated\"));
            return prepareCreate();
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e,ResourceBundle.getBundle(\"/Bundle\").getString(\"PersistenceErrorOccured\"));
            return null;
        }
    }

    public String prepareEdit() {
        current = (Writer) getItems().getRowData();
        selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
        return \"Edit\";
    }

    public String update() {
        try {
            getJpaController().edit(current);
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle(\"/Bundle\").getString(\"WriterUpdated\"));
            return \"View\";
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e,ResourceBundle.getBundle(\"/Bundle\").getString(\"PersistenceErrorOccured\"));
            return null;
        }
    }

    public String destroy() {
        current = (Writer) getItems().getRowData();
        selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
        performDestroy();
        recreateModel();
        return \"List\";
    }

    public String destroyAndView() {
        performDestroy();
        recreateModel();
        updateCurrentItem();
        if (selectedItemIndex >= 0) {
            return \"View\";
        } else {
            // all items were removed - go back to list
            recreateModel();
            return \"List\";
        }
    }

    private void performDestroy() {
        try {
            getJpaController().destroy(current.getWriterid());
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle(\"/Bundle\").getString(\"WriterDeleted\"));
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e,ResourceBundle.getBundle(\"/Bundle\").getString(\"PersistenceErrorOccured\"));
        }
    }

    private void updateCurrentItem() {
        int count = getJpaController().getWriterCount();
        if (selectedItemIndex >= count) {
            // selected index cannot be bigger than number of items:
            selectedItemIndex = count - 1;
            // go to previous page if last page disappeared:
            if (pagination.getPageFirstItem() >= count) {
                pagination.previousPage();
            }
        }
        if (selectedItemIndex >= 0) {
            current = getJpaController().findWriterEntities(1,selectedItemIndex).get(0);
        }
    }

    public DataModel getItems() {
        if (items == null) {
            items = getPagination().createPageDataModel();
        }
        return items;
    }

    private void recreateModel() {
        items = null;
    }

    public String next() {
        getPagination().nextPage();
        recreateModel();
        return \"List\";
    }

    public String previous() {
        getPagination().previousPage();
        recreateModel();
        return \"List\";
    }

    public SelectItem[] getItemsAvailableSelectMany() {
        return JsfUtil.getSelectItems(getJpaController().findWriterEntities(),false);
    }

    public SelectItem[] getItemsAvailableSelectOne() {
        return JsfUtil.getSelectItems(getJpaController().findWriterEntities(),true);
    }

    @FacesConverter(forClass = Writer.class)
    public static class WriterControllerConverter implements Converter {

        public Object getAsObject(FacesContext facesContext,UIComponent component,String value) {
            if (value == null || value.length() == 0) {
                return null;
            }
            WriterController controller = (WriterController) facesContext.getApplication().getELResolver().
                    getValue(facesContext.getELContext(),null,\"writerController\");
            return controller.getJpaController().findWriter(getKey(value));
        }

        java.lang.Integer getKey(String value) {
            java.lang.Integer key;
            key = Integer.valueOf(value);
            return key;
        }

        String getStringKey(java.lang.Integer value) {
            StringBuffer sb = new StringBuffer();
            sb.append(value);
            return sb.toString();
        }

        public String getAsString(FacesContext facesContext,Object object) {
            if (object == null) {
                return null;
            }
            if (object instanceof Writer) {
                Writer o = (Writer) object;
                return getStringKey(o.getWriterid());
            } else {
                throw new IllegalArgumentException(\"object \" + object + \" is of type \" + object.getClass().getName() + \"; expected type: \" + WriterController.class.getName());
            }
        }
    }
}
JSF实用程序类
package jsf.util;

import javax.faces.application.FacesMessage;
//其他进口在这里
public class JsfUtil {

    public static SelectItem[] getSelectItems(List<?> entities,boolean selectOne) {
        int size = selectOne ? entities.size() + 1 : entities.size();
        SelectItem[] items = new SelectItem[size];
        int i = 0;
        if (selectOne) {
            items[0] = new SelectItem(\"\",\"---\");
            i++;
        }
        for (Object x : entities) {
            items[i++] = new SelectItem(x,x.toString());
        }
        return items;
    }

    public static void addErrorMessage(Exception ex,String defaultMsg) {
        String msg = ex.getLocalizedMessage();
        if (msg != null && msg.length() > 0) {
            addErrorMessage(msg);
        } else {
            addErrorMessage(defaultMsg);
        }
    }

    public static void addErrorMessages(List<String> messages) {
        for (String message : messages) {
            addErrorMessage(message);
        }
    }

    public static void addErrorMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR,msg,msg);
        FacesContext.getCurrentInstance().addMessage(null,facesMsg);
    }

    public static void addSuccessMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO,msg);
        FacesContext.getCurrentInstance().addMessage(\"successInfo\",facesMsg);
    }

    public static String getRequestParameter(String key) {
        return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(key);
    }

    public static Object getObjectFromRequestParameter(String requestParameterName,Converter converter,UIComponent component) {
        String theId = JsfUtil.getRequestParameter(requestParameterName);
        return converter.getAsObject(FacesContext.getCurrentInstance(),component,theId);
    }
}
JSF分页助手
package jsf.util;

import javax.faces.model.DataModel;

public abstract class PaginationHelper {

    private int pageSize;
    private int page;

    public PaginationHelper(int pageSize) {
        this.pageSize = pageSize;
    }

    public abstract int getItemsCount();

    public abstract DataModel createPageDataModel();

    public int getPageFirstItem() {
        return page * pageSize;
    }

    public int getPageLastItem() {
        int i = getPageFirstItem() + pageSize - 1;
        int count = getItemsCount() - 1;
        if (i > count) {
            i = count;
        }
        if (i < 0) {
            i = 0;
        }
        return i;
    }

    public boolean isHasNextPage() {
        return (page + 1) * pageSize + 1 <= getItemsCount();
    }

    public void nextPage() {
        if (isHasNextPage()) {
            page++;
        }
    }

    public boolean isHasPreviousPage() {
        return page > 0;
    }

    public void previousPage() {
        if (isHasPreviousPage()) {
            page--;
        }
    }

    public int getPageSize() {
        return pageSize;
    }
} // END of CLASS
JPA控制器
package jpa.controllers;

import entities.Writer;
// other imports here

    public class WriterJpaController implements Serializable {

        public WriterJpaController(UserTransaction utx,EntityManagerFactory emf) {
            this.utx = utx;
            this.emf = emf;
        }
        private UserTransaction utx = null;
        private EntityManagerFactory emf = null;

        public EntityManager getEntityManager() {
            return emf.createEntityManager();
        }

        public void create(Writer writer) throws RollbackFailureException,Exception {
            if (writer.getTopicList() == null) {
                writer.setTopicList(new ArrayList<Topic>());
            }
            if (writer.getEvaluationList() == null) {
                writer.setEvaluationList(new ArrayList<Evaluation>());
            }
            if (writer.getBookList() == null) {
                writer.setBookList(new ArrayList<Book>());
            }
            EntityManager em = null;
            try {
                utx.begin();
                em = getEntityManager();
                List<Topic> attachedTopicList = new ArrayList<Topic>();
                for (Topic topicListTopicToAttach : writer.getTopicList()) {
                    topicListTopicToAttach = em.getReference(topicListTopicToAttach.getClass(),topicListTopicToAttach.getTopicname());
                    attachedTopicList.add(topicListTopicToAttach);
                }
                writer.setTopicList(attachedTopicList);
                List<Evaluation> attachedEvaluationList = new ArrayList<Evaluation>();
                for (Evaluation evaluationListEvaluationToAttach : writer.getEvaluationList()) {
                    evaluationListEvaluationToAttach = em.getReference(evaluationListEvaluationToAttach.getClass(),evaluationListEvaluationToAttach.getEvaluationPK());
                    attachedEvaluationList.add(evaluationListEvaluationToAttach);
                }
                writer.setEvaluationList(attachedEvaluationList);
                List<Book> attachedBookList = new ArrayList<Book>();
                for (Book bookListBookToAttach : writer.getBookList()) {
                    bookListBookToAttach = em.getReference(bookListBookToAttach.getClass(),bookListBookToAttach.getBookPK());
                    attachedBookList.add(bookListBookToAttach);
                }
                writer.setBookList(attachedBookList);
                em.persist(writer);
                for (Topic topicListTopic : writer.getTopicList()) {
                    topicListTopic.getWriterList().add(writer);
                    topicListTopic = em.merge(topicListTopic);
                }
                for (Evaluation evaluationListEvaluation : writer.getEvaluationList()) {
                    Writer oldWriterOfEvaluationListEvaluation = evaluationListEvaluation.getWriter();
                    evaluationListEvaluation.setWriter(writer);
                    evaluationListEvaluation = em.merge(evaluationListEvaluation);
                    if (oldWriterOfEvaluationListEvaluation != null) {
                        oldWriterOfEvaluationListEvaluation.getEvaluationList().remove(evaluationListEvaluation);
                        oldWriterOfEvaluationListEvaluation = em.merge(oldWriterOfEvaluationListEvaluation);
                    }
                }
                for (Book bookListBook : writer.getBookList()) {
                    Writer oldWriterOfBookListBook = bookListBook.getWriter();
                    bookListBook.setWriter(writer);
                    bookListBook = em.merge(bookListBook);
                    if (oldWriterOfBookListBook != null) {
                        oldWriterOfBookListBook.getBookList().remove(bookListBook);
                        oldWriterOfBookListBook = em.merge(oldWriterOfBookListBook);
                    }
                }
                utx.commit();
            } catch (Exception ex) {
                try {
                    utx.rollback();
                } catch (Exception re) {
                    throw new RollbackFailureException(\"An error occurred attempting to roll back the transaction.\",re);
                }
                throw ex;
            } finally {
                if (em != null) {
                    em.close();
                }
            }
        }

        public void edit(Writer writer) throws IllegalOrphanException,NonexistentEntityException,RollbackFailureException,Exception {
          // remainder of code goes here
        }

        public void destroy(Integer id) throws IllegalOrphanException,Exception {
           // remainder of code goes here
        }

        public List<Writer> findWriterEntities() {
            return findWriterEntities(true,-1,-1);
        }

        public List<Writer> findWriterEntities(int maxResults,int firstResult) {
            return findWriterEntities(false,maxResults,firstResult);
        }

        private List<Writer> findWriterEntities(boolean all,int maxResults,int firstResult) {
            EntityManager em = getEntityManager();
            try {
                CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
                cq.select(cq.from(Writer.class));
                Query q = em.createQuery(cq);
                if (!all) {
                    q.setMaxResults(maxResults);
                    q.setFirstResult(firstResult);
                }
                return q.getResultList();
            } finally {
                em.close();
            }
        }

        public Writer findWriter(Integer id) {
            EntityManager em = getEntityManager();
            try {
                return em.find(Writer.class,id);
            } finally {
                em.close();
            }
        }

        public int getWriterCount() {
            EntityManager em = getEntityManager();
            try {
                CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
                Root<Writer> rt = cq.from(Writer.class);
                cq.select(em.getCriteriaBuilder().count(rt));
                Query q = em.createQuery(cq);
                return ((Long) q.getSingleResult()).intValue();
            } finally {
                em.close();
            }
        }

    }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-