I needed to call into Wicket code from a jQuery function. Building on the sample code from
Calling Wicket from Javascript, I created an end-to-end working example. In my case I wanted to manipulate a row in my data table when a user clicked a jQuery widget in that row. I needed to pass the markup id from the widget to the Wicket handler. In my case, My item type is DefaultMutableTreeNode. Note that contrary to what the wiki page says, I did not need to put a script tag in my html code.
MyDataView.java
@Override
protected void populateItem(final Item<DefaultMutableTreeNode> item)
{
super.populateItem(item);
// Important!!
item.setOutputMarkupId(true);
...
}
MyDataPanel.java
public class MyDataPanel extends DataPanel
{
public MyDataPanel(String id, final HtDataView dataView,
WebPage parent)
{
...
final AbstractDefaultAjaxBehavior behave = new AbstractDefaultAjaxBehavior()
{
private static final long serialVersionUID = 1L;
@Override
protected void respond(final AjaxRequestTarget target)
{
final String paramMarkupId = RequestCycle.get().getRequest().getParameter("markupId");
MyDataPanel.this.visitChildren(Item.class,
new Component.IVisitor<Item<DefaultMutableTreeNode>>()
{
public Object component(Item<DefaultMutableTreeNode> item)
{
if (StringUtils.equals(paramMarkupId, item.getMarkupId()))
{
...your code here...
}
return STOP_TRAVERSAL;
}
});
}
};
parent.add(behave);
final CharSequence url = behave.getCallbackUrl();
add(new AbstractBehavior()
{
private static final long serialVersionUID = 1L;
@Override
public void renderHead(IHeaderResponse response)
{
String js = "function callWicket(markupId) { var wcall = wicketAjaxGet ('"
+ url + "&markupId='+markupId, function() { }, function() { } ) }";
response.renderJavascript(js, "myScript");
}
});
...
MyJQueryStuff.js
$.fn.toggleBranch = function() {
...
var idAttr = $(this).attr("id");
callWicket(idAttr);
...
1293

被折叠的 条评论
为什么被折叠?



