Google app engine 存储用于应用程序引擎分页的光标
我正在尝试使用AppEngine的RPC和GWT实现分页(这是一个AppEngine连接的项目) 如何将查询结果和web安全游标对象从RPC传递给GWT客户端 我见过使用servlet的示例,但我想知道如何在没有servlet的情况下实现它 我考虑过使用memcache在服务器上缓存光标,但我不确定这是否合适,或者应该使用什么作为键(我假设会话标识符,但我不确定appengine上如何处理它们)Google app engine 存储用于应用程序引擎分页的光标,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我正在尝试使用AppEngine的RPC和GWT实现分页(这是一个AppEngine连接的项目) 如何将查询结果和web安全游标对象从RPC传递给GWT客户端 我见过使用servlet的示例,但我想知道如何在没有servlet的情况下实现它 我考虑过使用memcache在服务器上缓存光标,但我不确定这是否合适,或者应该使用什么作为键(我假设会话标识符,但我不确定appengine上如何处理它们) 指向示例项目的链接将非常棒,我一直找不到任何链接。好的,所以最好的方法是将光标作为字符串存储在客户端
指向示例项目的链接将非常棒,我一直找不到任何链接。好的,所以最好的方法是将光标作为字符串存储在客户端上 要做到这一点,您必须创建一个可传输的包装器类,这样您就可以通过RequestFactory将其传递回客户端,RequestFactory可以保存结果列表和游标字符串。为此,需要创建一个普通POJO,然后为其创建一个代理 以下是POJO的代码:
public class OrganizationResultsWrapper {
public List<Organization> list;
public String webSafeCursorString;
public List<Organization> getList() {
return list;
}
public void setList(List<Organization> list) {
this.list = list;
}
public String getWebSafeCursorString() {
return this.webSafeCursorString;
}
public void setWebSafeCursorString(String webSafeCursorString) {
this.webSafeCursorString = webSafeCursorString;
}
}
公共类OrganizationResultsWrapper{
公开名单;
公共字符串websafecurstring;
公共列表getList(){
退货清单;
}
公共无效集合列表(列表){
this.list=列表;
}
公共字符串getWebSAFECURSTRING(){
返回此.websafecurstring;
}
public void setWebSAFECURSTRING(字符串WebSAFECURSTRING){
this.websafecurstring=websafecurstring;
}
}
对于代理:
@ProxyFor(OrganizationResultsWrapper.class)
public interface OrganizationResultsWrapperProxy extends ValueProxy{
List<OrganizationProxy> getList();
void setList(List<OrganizationProxy> list);
String getWebSafeCursorString();
void setWebSafeCursorString(String webSafeCursorString);
}
@ProxyFor(OrganizationResultsWrapper.class)
公共接口OrganizationResultsWrapperProxy扩展了ValueProxy{
List getList();
无效集合列表(列表);
字符串getWebSAFECURSTRING();
void setWebSAFECURSTRING(字符串WebSAFECURSTRING);
}
将您的服务和requestFactory设置为分别使用POJO和代理
// service class method
@ServiceMethod
public OrganizationResultsWrapper getOrganizations(String webSafeCursorString) {
return dao.getOrganizations(webSafeCursorString);
}
// request factory method
Request<OrganizationResultsWrapperProxy> getOrganizations(String webSafeCursorString);
//服务类方法
@服务方法
public OrganizationResultsWrapper getOrganizations(字符串WebSafeCurString){
返回dao.getOrganizations(websafecurstring);
}
//请求工厂方法
请求getOrganizations(字符串websafecurstring);
然后确保并运行RPC向导,以便运行验证过程,否则将在服务器上出现请求上下文错误
以下是我的数据访问类中的实现:
public OrganizationResultsWrapper getOrganizations(String webSafeCursorString) {
List<Organization> list = new ArrayList<Organization>();
OrganizationResultsWrapper resultsWrapper = new OrganizationResultsWrapper();
Query<Organization> query = ofy().load().type(Organization.class).limit(50);
if (webSafeCursorString != null) {
query = query.startAt(Cursor.fromWebSafeString(webSafeCursorString));
}
QueryResultIterator<Organization> iterator = query.iterator();
while (iterator.hasNext()) {
list.add(iterator.next());
}
resultsWrapper.setList(list);
resultsWrapper.setWebSafeCursorString(iterator.getCursor().toWebSafeString());
return resultsWrapper;
}
public OrganizationResultsWrapper getOrganizations(字符串WebSAFECURSTRING){
列表=新的ArrayList();
OrganizationResultsWrapper resultsWrapper=新的OrganizationResultsWrapper();
Query Query=ofy().load().type(Organization.class).limit(50);
if(websafecurstring!=null){
query=query.startAt(Cursor.fromWebSafeString(WebSafeCursString));
}
QueryResulterator迭代器=query.iterator();
while(iterator.hasNext()){
add(iterator.next());
}
resultsWrapper.setList(列表);
resultsWrapper.setWebSafeCursorString(iterator.getCursor().TowersFestString());
返回结果包装器;
}
第二个选项是将websafecurstring保存在memcache中,如您所述
我的想法是这样的: