Tapestry 5, диалоговое окно пользовательского интерфейса jQuery и действие закрытия

Использование tapestry5-jquery и Диалог, ¿Как реализовать действие закрытия для родительского диалога?. Я имею в виду кнопку, которая выполняет некоторый код, а затем закрывает родительский диалог без изменения страницы.

Это версия только для javascript того, что я делаю:

<div id="container">
  ¿Are you sure to delete selected items?
</div>

$('#container').dialog({
  modal : true,
  buttons:[{
     text: "Yes",
     click: function() {
        //Perform action here, then close dialog.
        $(this).dialog("close");
     }
    },{
     text: "No",
     click: function() {
        //Only close dialog
        $(this).dialog("close");
     }
    }
  }]
});

Но мне нужно использовать теги Tapestry 5 и методы класса java:

<t:jquery.dialog t:clientId="delDialog">
  ¿Are you sure to delete selected items?
  <input t:type="submit" t:id="delYes" value="Yes"/>
  <input t:type="submit" t:id="delNo" value="No"/>
</t:jquery.dialog>

Java-класс:

public class UserAdmin { 
  @OnEvent(component = "delYes", value = EventConstants.SELECTED)
  void delYesClicked(){
     //Delete selected items
  }

  @OnEvent(component = "delNo", value = EventConstants.SELECTED)
  void delNoClicked(){
     //Close dialog
  }
}

Спасибо.


person dovahkiin    schedule 09.03.2012    source источник


Ответы (2)


Вы можете сделать что-то подобное, если clientId всегда один и тот же (например, «delDialog»)

@Inject
private AjaxResponseRenderer ajaxResponseRenderer;

protected void addCloseDialogCommand() {

    ajaxResponseRenderer.addCallback(new JavaScriptCallback() {

        @Override
        public void run(JavaScriptSupport javascriptSupport) {

            javascriptSupport.addScript("$('#delDialog').dialog('close');");
        }
    });
}

... и вызовите метод в обработчике событий:

@OnEvent(component = "delNo", value = EventConstants.SELECTED)
void delNoClicked() {
    addCloseDialogCommand();
}

Это поведение может быть реализовано с помощью миксина, который вы применяете к любому элементу, который хотите.

person criedel    schedule 11.03.2012
comment
Пробовал предоставленный код, не работает. Вместо этого сработало предложение Mixin. Я поставлю позже. - person dovahkiin; 24.03.2012

Предлагаемый миксин:

public class DialogButtonHandler {
  @Parameter(value = "dlgId", defaultPrefix = BindingConstants.LITERAL)
  private String dlgId;

  @Inject
  private JavaScriptSupport javaScriptSupport;

  @InjectContainer
  private ClientElement element;

  @AfterRender
  public void afterRender() {
    javaScriptSupport.addScript(
      "$('#%s').click(function(){$('#%s').dialog('close');});",
          element.getClientId(), dlgId);
  }}

Разметка:

<t:jquery.dialog t:clientId="delDialog">
    ¿Are you sure to delete selected items?
    <input t:type="submit" t:id="delYes" value="Yes" />
    <input t:type="submit" t:id="delNo" value="No" t:mixins="dialogButtonHandler" t:dlgId="delDialog"/>
</t:jquery.dialog>
person dovahkiin    schedule 24.03.2012