Gwt 吕震中本:我如何在移动中添加/删除手机桌上的按钮

Gwt 吕震中本:我如何在移动中添加/删除手机桌上的按钮,gwt,Gwt,我的单元格表中有此按钮单元格 ButtonCell reListCell=new ButtonCell(); reListColumn=新列(reListCell){ @凌驾 公共字符串getValue(EmployerJobs对象){ 返回“重新登录”; } }; ctJobs.addColumn(reListColumn, EmployerDashBoardConstants.EMPTYHEADERCOLUMN); 但我只希望在以下条件通过时显示此单元格 public void getDa

我的
单元格表中有此按钮单元格

ButtonCell reListCell=new ButtonCell();
reListColumn=新列(reListCell){
@凌驾
公共字符串getValue(EmployerJobs对象){
返回“重新登录”;
}
};
ctJobs.addColumn(reListColumn,
EmployerDashBoardConstants.EMPTYHEADERCOLUMN);
但我只希望在以下条件通过时显示此单元格

public void getDateDiff(最终EmployerJobs对象){
rpcService.getDateDiff(object.getJobValidDate(),new AsyncCallback()){
失败时的公共无效(可丢弃){
}
成功时公共无效(布尔作业已过期){
如果(已过期){
//在这里,我想显示我的RELISTCELL,意思是如果工作只有在那时才到期
//将有一个按钮显示重新列表将出现在该行中,例如
//未过期的作业不应显示“否”按钮。。
}
}
});
}
我怎样才能做到这一点

谢谢

我同意DTing。
查询每个单元格/行的后端不是很有效。 我宁愿将信息(jobExpired)放入您的
EmployeerJobs
类中,并在您请求将
EmployeerJobs
列表显示在您的
单元格表中时传输信息
您可以定期更新列表以考虑更改(请参阅有关如何执行此操作的示例)

但是你的第一个问题(隐藏牢房)。有两种解决方案:

  • 使用并替代渲染方法
ActionCell:

ActionCell<EmployerJobs> reListCell = new ActionCell<EmployerJobs>("ReList",
    new ActionCell.Delegate<EmployerJobs>() {
        @Override
        public void execute(EmployerJobs object) {
           // code to be executed 
        }
     }) 
 {
     @Override
     public void render(Cell.Context context,EmployerJobs value,SafeHtmlBuilder sb) {
         if (value.isJobExpired())   // isJobExpired returns the field jobExpired.
             super.render(context,value,sb);
         }
 };

 reListColumn = new Column<EmployerJobs, EmployerJobs>(reListCell) {
      @Override
      public String getValue(EmployerJobs object) {
        return object;
      }
 };

 ctJobs.addColumn(reListColumn, 
    EmployerDashBoardConstants.EMPTYHEADERCOLUMN);
ActionCell reListCell=新的ActionCell(“ReList”,
新建ActionCell.Delegate(){
@凌驾
public void execute(EmployerJobs对象){
//要执行的代码
}
}) 
{
@凌驾
公共void呈现(Cell.Context上下文、EmployerJobs值、SafeHtmlBuilder sb){
if(value.isJobExpired())//isJobExpired返回字段jobExpired。
超级渲染(上下文、值、sb);
}
};
reListColumn=新列(reListCell){
@凌驾
公共字符串getValue(EmployerJobs对象){
返回对象;
}
};
ctJobs.addColumn(reListColumn,
EmployerDashBoardConstants.EMPTYHEADERCOLUMN);
  • 使用ButtonCell并覆盖列的渲染方法
ButtonCell:

ButtonCell reListCell = new ButtonCell();
reListColumn = new Column<EmployerJobs, String>(reListCell) {
  @Override
  public String getValue(EmployerJobs object) {
    return "ReList";
  }
  @Override
  public void render(Cell.Context context,EmployerJobs object,SafeHtmlBuilder sb) {
     if (value.isJobExpired())   // isJobExpired returns the field jobExpired.
        super.render(context,value,sb);
  }
};

ctJobs.addColumn(reListColumn, 
    EmployerDashBoardConstants.EMPTYHEADERCOLUMN);
ButtonCell reListCell=new ButtonCell();
reListColumn=新列(reListCell){
@凌驾
公共字符串getValue(EmployerJobs对象){
返回“重新登录”;
}
@凌驾
公共void呈现(Cell.Context上下文、EmployerJobs对象、SafeHtmlBuilder sb){
if(value.isJobExpired())//isJobExpired返回字段jobExpired。
超级渲染(上下文、值、sb);
}
};
ctJobs.addColumn(reListColumn,
EmployerDashBoardConstants.EMPTYHEADERCOLUMN);
刚刚尝试了Umit解决方案#2 ButtonCell。它起作用了

要将特定操作链接到按钮,请重新设置column.setFieldUpdater(新的FieldUpdater…)。。。。
将需要

我也尝试了ButtonCell解决方案。但如果您在单元格中单击“没有按钮”,则客户端会出现错误:

com.google.gwt.core.client.JavaScriptException:(TypeError)@com.google.gwt.core.client.impl.impl::apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)([JavaScript对象(445)、JavaScript对象(240)、JavaScript对象(637)]:父对象为空

因此,我添加了此选项以覆盖事件并避免事件(如果需要):

        @Override
        public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context,
                Element parent, YourObject object, NativeEvent event) {
            if (object.isCompleted())  
                super.onBrowserEvent( context, parent,  object,  event);
        }

我不知道这是否是更好的方法,但它确实有效。

为表中的每一行调用服务器来检查日期是否有效似乎太过分了。可能应该在客户端进行检查,如果按下按钮,则在服务器上进行验证。