Добавление гиперссылки в GWT celltable - PullRequest
2 голосов
/ 28 января 2012

Я пытаюсь добавить гиперссылку в 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; 
      }
});

Ответы [ 3 ]

8 голосов
/ 28 января 2012

Вместо 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);
         }
});

* 1013 миниатюрный элемент питания *:

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 витрина для получения дополнительной информации.

3 голосов
/ 12 июня 2012

Я разместил свой ответ в похожей теме: Как я могу отобразить ClickableTextCell в качестве якоря в 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());

        }
    });
1 голос
/ 28 января 2012

Как указано в ответе выше, вы можете использовать программу обновления, когда вы хотите редактировать на месте.Но если вы хотите захватить щелчок для выполнения какого-либо действия, вы можете сделать это, используя 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 (employeeerJobsColumn, "заголовок идет здесь");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...