2012-01-28 5 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

하지만 때 나는 cliclable 텍스트 셀을 클릭 할 것이고 하이퍼 링크는 클릭 될 것입니다. 그러면 이전 페이지로 다시 돌아갑니다. – 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()); 

     } 
    });