当前位置: 首页 > 知识库问答 >
问题:

映射实体关系和转换实体的策略

夹谷承安
2023-03-14

我只是在学习java ee 6。我的目标是有一个简单的crud应用程序,让我创建编辑列表和删除一个简单的实体,由id,一个名称字符串和一个描述字符串。我使用了eclipse而不是netbeans,使用了JBoss7而不是glass Fish,只是为了查看一些代码http://netbeans.org/kb/docs/web/jsf20-crud.html。嗯....它起作用了。

现在认为我的实体是一个“用户”:id,用户名,密码。我想添加一个“UserRole”实体,这里是:id,roleName。然后我建立了一个单人和多人对一人的关系。

那么,如何管理创建用户页面中的角色输入呢?Netbeans crud建议的代码是一个selectonemenu(一个选择下拉列表),其中所有角色ID都是值。在form submit上,角色控制器(jsf托管bean)中的静态内部类“RoleConverter”(一个facesconverter)接受选定和提交的角色Id字符串,并使用EJB-DAO查找相应的角色。

我的问题是:

  • 我明白吗?我上面写的是正确的吗?
  • 以这种方式使用转换器是最佳的最佳实践吗?对于这样一个简单且重复的任务,难道没有更好的解决方案吗?
  • 实体的转换器除了实体名称外都是相同的,我如何才能删除重复,例如使用通用转换器?
  • 您认为在JSF2中管理多对多的最佳GUI是什么?(例如,具有多个角色的用户场景)

共有1个答案

桂鑫鹏
2023-03-14

那是正确的。之所以需要转换器,是因为HTML基本上是一个大的String,HTTP请求参数都是String。HTML和HTTP既不理解也不传递具体的Java对象。它们只存在于WebServer的内存中。您确实需要能够在SomerandomEntityString之间进行转换,以便生成HTML响应并正确解析HTTP请求参数。

至于转换器并不是真的干涸,如果您的所有实体都扩展了一个公共的基本实体,其中@id与getter和setter一起定义,并且您有一个通用DAO,那么您可以为此创建一个通用转换器。如下所示(省略了简单的预检查和converterexception处理):

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (value == null) {
        return null;
    }

    Long id = ((BaseEntity) value).getId();
    return String.valueOf(id);
}

@Override
@SuppressWarnings("unchecked")
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if (value == null) {
        return null;
    }

    Long id = Long.valueOf(value);
    Class<BaseEntity> type = (Class<BaseEntity>) component.getValueExpression("value").getType(context.getELContext());
    return genericDAO.find(id, type);
}

或者,在 的特定情况下,还可以使用一个转换器,该转换器基于 的对象值进行转换。然而,这并不是微不足道的。JSF2组件库OmniFaces在其分类中有这样一个SelectItemsConverter。如果感兴趣,您可能希望检查它的源代码

 类似资料:
  • 问题内容: 我是Go语言的新手,具有C#背景并且对如何构造Go应用程序感到困惑。 假设我正在构建一个REST API,它将位于数据库之上。还要说,即使完成后,鉴于业务的变迁等,此应用程序可能仍需要频繁更改。 在带有诸如Entity Framework和DTO之类的工具的C#中,我通过从控制器给出的结果中抽象出数据库来缓解此问题。如果更改数据库中一堆字段的名称,则可能必须更改数据库访问逻辑,但是希望

  • 快速总结我想要实现的目标。请给出实施或设计建议:) 我有两个表:用户,图像。在UserDO中,我希望保留一组所有用户的图像,以及单个图像,即用户的肖像(在我的示例中,该组将包括肖像): 在ImageDO中,我有一个userid作为外键来记录哪个用户上传了图像。但是它没有布尔值,因为认为一个用户可能会上传许多图像,但只有一个是肖像。 有什么方法可以实现这一点吗?或者我需要维护另一个表(例如,Port

  • 我有以下模式: 项目(ID,名称)项目用户(项目ID,用户ID)用户(名称,ID) 实体如下 显然是一对多。项目可以有多个用户。 现在,我的目标是编写jooq查询,在那里我可以获取已经有相应用户的项目对象。 但是当预期约15时,查询将恢复千分之一的结果

  • 我是mapsturct的新手,我只想在dto和实体之间映射; 我的银行课; 我的银行dto类; 我下面的映射器;

  • 我试图在JPA中规划这种关系,但似乎在这里迷失了方向。这是我的ER型号说明。我有一个,其中一个客户有一个,这个包含股票。这就是我的想法。每个都有一个,即(关系)1:1,仓库可以包含更多的股份(库存)。仓库-- 我有以下代码。 Customer.java Depot.java 使用上面的代码,我甚至可以创建并持久化客户。我是不是做错了地图? 如果我试图将数据持久化到上面的数据库中,我会收到以下错误消

  • 我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。