我的数据库中有用户ID和用户角色的组合键。
为了将数据库与模型映射,下面是代码:
@Id
@Column(name="ID")
public int userId;
@Id
@Column(name="USER_ROLE")
public String userRole;
......
......
@Override
public String toString() {
return userId;
}
目前,我可以显示用户列表,也可以为我的应用程序添加新用户。但是,当我尝试通过单击用户ID路由到默认的“编辑”模板时,会收到错误消息:“无路由”。
另外,我看到用户单击时,复合ID不会作为URL发送,实际上,某些对象被附加在URL的末尾(这可能是其原因)。
请让我知道当数据库中有复合键时如何显示默认的编辑屏幕。从很长一段时间以来,我一直在努力解决这个问题,但是在文档中没有任何引用资料:(
最佳答案
Play CRUD Controller 无法与复合键配合使用。这是解决该问题的方法。
首先,确定组合键的字符串化格式-在下面的示例中,我只用了两个键(ssn,accountId),并将它们用“-”分隔。
在您的模型中,覆盖GenericModel和JPABase的_key
和findById
方法,如下所示:
package models;
import play.db.jpa.GenericModel;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Part extends GenericModel {
@Id
public int ssn;
@Id
public int accountId;
public String name;
/**
* Find a part by its composite id ("ssn-accountId")
*/
public static Part findById(String id) {
// Split the composite id to extract ssn and accountId
String[] elements = id.split("-");
int ssn = Integer.valueOf(elements[0]);
int accountId = Integer.valueOf(elements[1]);
return Part.find("ssn=? AND accountId=?", ssn, accountId).first();
}
/**
* Return a composite id ("ssn-accountId")
*/
public String _key() {
return ssn + "-" + accountId;
}
}
接下来,在您的 Controller 中覆盖
show
方法: package controllers;
import models.Part;
public class Parts extends CRUD {
/**
* CRUD show method doesn't know how to handle composite ids.
*
* @param id composite of ssn + "-" + accountId
* @throws Exception
*/
public static void show(String id) throws Exception {
// Do not rename 'type' or 'object'
ObjectType type = ObjectType.get(getControllerClass());
notFoundIfNull(type);
Part object = Part.findById(id);
notFoundIfNull(object);
render("CRUD/show.html", type, object);
}
}
而已。
关于java - 在Crud Play 1.2.4中使用复合键路由到默认的EDIT模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17058874/