编辑:搜索似乎以一种非常基本的方式工作,搜索在相关模型的所有字符串成员字段中输入的任何文本,没有特殊的搜索运算符。
如果有任何方法可以自定义搜索的工作方式,我想知道。现在看起来我只需要忽略内置的搜索内容并自行滚动。
自添加notes
字段后,它开始返回任何内容而不是一切。
到目前为止唯一可行的是在搜索框中输入“test”,它会在notes字段中返回带有“test”的记录。搜索“notes:test”或“notes = test”不起作用,也没有尝试搜索agent
或status
字段。我已经尝试了类似“1400”的东西,这是我通过phpMyAdmin在代理字段中验证的值,以及状态字段的“0”或“VALID”之类的东西,这是所有记录所具有的。 / p>
模型字段:
public class AgentShift extends Model {
public enum Status { VALID, RESCHEDULED, EXTENDED, DELETED } // REDUCED?
@Required @Min(1000) @Max(99999)
public int agent;
public Status status = Status.VALID;
@Required
@Columns(columns={@Column(name="start_time"),@Column(name="end_time")})
@Type(type="org.joda.time.contrib.hibernate.PersistentInterval")
public Interval scheduled;
@Type(type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime")
public LocalTime agent_in;
@Type(type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime")
public LocalTime agent_out;
public String notes;
}
修改过的crud list页面:
#{extends 'main.html' /}
#{set title: 'Agent Shifts' /}
<div id="crudList" class="${type.name}">
<h2 id="crudListTitle">&{'crud.list.title', type.name}</h2>
<div id="crudListSearch">
#{crud.search /}
</div>
<div id="crudListTable">
#{crud.table fields:['id','agent','scheduled','status','notes'] }
#{crud.custom 'scheduled'}
#{if object.scheduled.getStart().toDateMidnight().equals(object.scheduled.getEnd().toDateMidnight())}
${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.scheduled.getStart())} to
${org.joda.time.format.DateTimeFormat.forStyle("-S").printTo(out, object.scheduled.getEnd())}
#{/if}
#{else}
${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.scheduled.getStart())} to
${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.scheduled.getEnd())}
#{/else}
#{/crud.custom}
*{
#{crud.custom 'entered_by'}
#{if object.entered_by}
${object.entered_by}
#{/if}
#{else} ?
#{/else}
#{/crud.custom}
#{crud.custom 'created'}
${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.created)}
#{/crud.custom}
}*
#{/crud.table}
</div>
<div id="crudListPagination">
#{crud.pagination /}
</div>
<p id="crudListAdd">
<a href="@{blank()}">&{'crud.add', type.modelName}</a>
</p>
</div>
答案 0 :(得分:2)
Here您可以看到如何自定义CRUD页面,包括如何在屏幕中显示对象的某些字段。
搜索字符串应采用以下格式:
<field name>:<value>
例如:
name:Liam
该搜索将过滤名称中包含Liam的所有对象。字段名称必须是列表页面中显示的字段。我不确定它是否适用于@Lob,但通常这不是你想要在列表页面中显示的字段,所以它不应该是一个问题。
我不得不说在Play 1.1中我遇到了一些问题,其中开始搜索不起作用(它引发了错误),我无法解决它。它似乎不会发生在1.2.1中(我不知道它是否是一个修复或只是我没有注意到的改变)
编辑:
在更新的问题上,列表页面似乎正确。
一个大胆的想法:你检查过数据库是否有正确的列?我记得当我改变一些模型和一些没有正确更新的列时,Hibernate没有公平性的问题,导致奇怪的行为。完全删除表格并让Play重新创建它可能是值得的。
如果这不能解决它很可能这是CRUD控制器中的Play错误,您需要找到源。
我首先关注的是缺少对Interval的rel注释,以及LocalTime和enum Status的使用。这应该没关系,但是......我担心我只能建议你做一个增量测试来解决这个问题:
答案 1 :(得分:2)
您可以使用弹性搜索模块。
1)定义控制器:
@ElasticSearchController.For(ElasticSearchSampleModel.class)
public class ElasticSearchExample extends ElasticSearchController {
}
2)使用@ElasticSearchable
注释定义标准JPA模型:
@Entity
@ElasticSearchable
public class ElasticSearchSampleModel extends Model {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The field1. */
public String field1;
/** The field2. */
public String field2;
/**
* To String
*
* @see play.db.jpa.JPABase#toString()
*/
@Override
public String toString() {
return "ElasticSearchSampleModel [field1=" + this.field1 + ", field2=" + this.field2 + "]";
}
}