2012-01-28 22 views
2

私はcelltableにハイパーリンクを追加しようとしています。そのリンクをクリックするとメソッドを呼び出したいと思っています。GWT celltableにハイパーリンクを追加する

私のセルテーブルにハイパーリンクが正しく表示されていますが、リンクをクリックしてメソッドを呼び出すことができません。リンクをクリックすると前のページに移動します。

すべてのソリューションあなたはインプレース編集をしたいときにアップデータを使用することができます上記の回答で示唆したように

Hyperlink link = new Hyperlink("Delete",""); 

Column<EmployerJobs, Hyperlink> linkColumn = 
    new Column<EmployerJobs, Hyperlink>(new HyperLinkCell()) { 
     @Override 
     public Hyperlink getValue(EmployerJobs list) { 
     link.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 
      deleteJobs(list); 
      } 
     }); 
     return link; 
     } 
}); 

答えて

7

HyperlinkCellではなく、ClickableTextCell、ButtonCellまたはActionCellのいずれかを使用できます。

ClickableTextCell

Column<EmployerJobs, String> linkColumn = 
    new Column<EmployerJobs, String>(new ClickableTextCell()) { 
     @Override 
     public String getValue(EmployerJobs object) { 
      return TEXT_TO_DISPLAY; 
     } 
    },'linkheadertext'); 
linkColumn.setFieldUpdater(new FieldUpdater<EmployerJobs, String>() { 
     @Override 
     public void update(int index, EmployerJobs object, String value) { 
      deleteJobs(object); 
     } 
}); 

ボタン型電池

Column<EmployerJobs, String> buttonColumn = 
    new Column<EmployerJobs, String>(new ButtonCell()) { 
     @Override 
     public String getValue(EmployerJobs object) { 
      return TEXT_TO_DISPLAY; 
     } 
    },'linkheadertext'); 
buttonColumn.setFieldUpdater(new FieldUpdater<EmployerJobs, String>() { 
     @Override 
     public void update(int index, EmployerJobs object, String value) { 
      deleteJobs(object); 
     } 
}); 

ActionCell

Column<EmployerJobs, EmployerJobs> actionColumn = 
    new Column<EmployerJobs, EmployerJobs>(new ActionCell<EmployerJobs>("Click Me", 
     new ActionCell.Delegate<EmployerJobs>() { 
      @Override 
      public void execute(EmployerJobs jobs) { 
       deleteJobs(jobs); 
      } 
     }) 
    { 
     @Override 
     public EmployerJobs getValue(EmployerJobs object) { 
      return object; 
     } 
    },'linkheadertext'); 

詳細はCellSample showcaseをご覧ください。

1

。しかし、何らかのアクションを実行するためにクリックをキャプチャしたい場合は、ClickableTextCellを使用して実行できます。

ClickableTextCell employerJobsCell = new ClickableTextCell(); 

Column<EmployerJobs, String> employerJobsColumn = new Column<EmployerJobs, String>(employerJobsCell) {  
    @Override 
    public String getValue(EmployerJobs object) { 
     return object.getWhichStringToDisplay(); 
    } 

    @Override 
    public void render(Context context, EmployerJobs object, SafeHtmlBuilder sb) { 
     //this method is optional, can be used if the display needs to be customized 
    } 

    @Override 
    public void onBrowserEvent(Context context, Element elem, EmployerJobs object, NativeEvent event) { 
     super.onBrowserEvent(context, elem, object, event); 

     Event evt = Event.as(event); 
     int eventType = evt.getTypeInt(); 
     if (eventType == Event.ONCLICK) { 
      //call delete job when cell is clicked 
      deleteJobs(object); 
     } 
    } 
}; 

dataGrid.addColumn(employerJobsColumn、 "ヘッダーはここに入ります");

+0

しかしとき私はクリック可能なテキストセルをクリックし、ハイパーリンクをクリックするだけで前のページに戻る – junaidp

3

私は同様のスレッドで私の答えを投稿しています How can I render a ClickableTextCell as an anchor in a GWT CellTable? が、このスレッドをブックマークする人のために: これはあなたが

public class ClickableSafeHtmlCell extends AbstractCell<SafeHtml> { 
/** 
* Construct a new ClickableSafeHtmlCell. 
*/ 
public ClickableSafeHtmlCell() { 
    super("click", "keydown"); 
} 

@Override 
public void onBrowserEvent(Context context, Element parent, SafeHtml value, NativeEvent event, 
     ValueUpdater<SafeHtml> valueUpdater) { 
    super.onBrowserEvent(context, parent, value, event, valueUpdater); 
    if ("click".equals(event.getType())) { 
     onEnterKeyDown(context, parent, value, event, valueUpdater); 
    } 
} 

@Override 
protected void onEnterKeyDown(Context context, Element parent, SafeHtml value, 
     NativeEvent event, ValueUpdater<SafeHtml> valueUpdater) { 
    if (valueUpdater != null) { 
     valueUpdater.update(value); 
    } 
} 

@Override 
public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) { 
    if (value != null) { 
     sb.append(value); 
    } 
} 

そして、使用に必要なものです:

Column<YourProxy, SafeHtml> nameColumn = new Column<YourProxy, SafeHtml>(
     new ClickableSafeHtmlCell()) { 
    @Override 
    public SafeHtml getValue(YourProxy object) { 
     SafeHtmlBuilder sb = new SafeHtmlBuilder(); 
     sb.appendHtmlConstant("<a>"); 
     sb.appendEscaped(object.getName()); 
     sb.appendHtmlConstant("</a>"); 
     return sb.toSafeHtml(); 
    } 
}; 

nameColumn.setFieldUpdater(new FieldUpdater<YourProxy, SafeHtml>() { 
     @Override 
     public void update(int index, YourProxy object, SafeHtml value) { 
      Window.alert("You have clicked: " + object.getName()); 

     } 
    }); 
関連する問題