在GWT celltable中添加超链接
我试图在celltable中添加一个超链接,单击该链接我想调用一个方法 使用下面的代码,我在我的celltable中正确地获得了一个超链接,但我无法通过单击该链接调用方法,当我单击该链接时,它会将我带到上一页 任何解决方案在GWT celltable中添加超链接,gwt,Gwt,我试图在celltable中添加一个超链接,单击该链接我想调用一个方法 使用下面的代码,我在我的celltable中正确地获得了一个超链接,但我无法通过单击该链接调用方法,当我单击该链接时,它会将我带到上一页 任何解决方案 Hyperlink link = new Hyperlink("Delete",""); Column<EmployerJobs, Hyperlink> linkColumn = new Column<EmployerJobs, Hyperlin
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;
}
});
Hyperlink=新的超链接(“删除”和“);
列链接列=
新列(新的HyperLinkCell()){
@凌驾
公共超链接getValue(EmployerJobs列表){
addClickHandler(新的ClickHandler(){
公共作废一次点击(点击事件){
删除工作(列表);
}
});
返回链接;
}
});
正如上面回答中所建议的,当您需要就地编辑时,可以使用更新程序。但是,如果您想捕获单击以执行某些操作,可以使用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);
}
}
};
ClickableTextCell EmployeerJobsell=新建ClickableTextCell();
列employerJobsColumn=新列(employerJobsCell){
@凌驾
公共字符串getValue(EmployerJobs对象){
return object.getWhichStringToDisplay();
}
@凌驾
公共void呈现(上下文上下文、EmployerJobs对象、SafeHtmlBuilder sb){
//此方法是可选的,可在需要自定义显示时使用
}
@凌驾
public void onBrowserEvent(上下文上下文、元素元素、EmployerJobs对象、NativeEvent事件){
onBrowserEvent(上下文、元素、对象、事件);
事件evt=事件.as(事件);
int eventType=evt.getTypeInt();
if(eventType==Event.ONCLICK){
//单击单元格时调用删除作业
删除作业(对象);
}
}
};
addColumn(employerJobsColumn,“标题在这里”) 您可以使用、ButtonCell或 可点击文本单元格:
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);
}
});
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');
列链接列=
新列(新的ClickableTextCell()){
@凌驾
公共字符串getValue(EmployerJobs对象){
将文本返回到屏幕;
}
}“链接头文本”);
setFieldUpdater(新的FieldUpdater(){
@凌驾
公共无效更新(int索引、EmployerJobs对象、字符串值){
删除作业(对象);
}
});
按钮cell:
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);
}
});
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');
Column按钮Column=
新列(new ButtonCell()){
@凌驾
公共字符串getValue(EmployerJobs对象){
将文本返回到屏幕;
}
}“链接头文本”);
setFieldUpdater(新的FieldUpdater(){
@凌驾
公共无效更新(int索引、EmployerJobs对象、字符串值){
删除作业(对象);
}
});
ActionCell:
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);
}
});
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');
列操作列=
新建列(新建ActionCell(“单击我”,
新建ActionCell.Delegate(){
@凌驾
公共作废执行(EmployerJobs作业){
删除工作(工作);
}
})
{
@凌驾
公共EmployerJobs getValue(EmployerJobs对象){
返回对象;
}
}“链接头文本”);
查看CellSample以获取更多信息。我已经在类似的帖子上发布了我的答案: 但对于那些将此帖子加入书签的人: 这就是你需要的
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);
}
}
公共类ClickableSafeThlCell扩展AbstractCell{
/**
*构建一个新的ClickableSafeThmlCell。
*/
公共可点击安全HTMLCELL(){
超级(“点击”、“按键”);
}
@凌驾
public void onBrowserEvent(上下文上下文、元素父级、安全HTML值、NativeEvent事件、,
ValueUpdater(ValueUpdater){
onBrowserEvent(上下文、父级、值、事件、值更新程序);
如果(“单击“.equals(event.getType())){
onEnterKeyDown(上下文、父级、值、事件、值更新程序);
}
}
@凌驾
受保护的void-onEnterKeyDown(上下文上下文、元素父元素、安全HTML值、,
NativeEvent事件,ValueUpdater(ValueUpdater){
if(valueUpdater!=null){
valueUpdater.update(值);
}
}
@凌驾
公共void呈现(上下文上下文、安全HTML值、安全HTMLBuilder sb){
if(值!=null){
附加(价值);
}
}
然后是用法:
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());
}
});
Column name Column=新列(
新建ClickableSafeThlCell()){
@凌驾
公共安全HTML getValue(您的代理对象){
SafeHtmlBuilder sb=新的SafeHtmlBuilder();
某人以““””号结尾;
sb.appender(object.getName());
某人以““””号结尾;
让某人回到安全地带();
}
};
nameColumn.setFieldUpdater(新的FieldUpdater(){
@凌驾
公共void更新(int索引、YourProxy对象、SafeHtml值){
警告(“您已单击:+object.getName());
}
});
但当我点击可点击文本单元格时,超链接也会被点击,它会再次进入上一页