admin管理员组文章数量:1025457
Is it possible to select multiple rows in Wicket by using clicking on a row, pressing the shift key and then clicking on another row?
I am using Wicket 6.20. I have figured out the code to select a single row, but I am not sure how to add the AJAX event to determine if the user has pressed the shift-key.
@Override
protected Item<T> newRowItem(final String id, final int index, final IModel<T> model) {
final Item<T> rowItem = new OddEvenItem<>(id, index, model);
rowItem.add(new AjaxEventBehavior("onclick") {
private static final long serialVersionUID = 6720512493017210281L;
@Override
protected void onEvent(AjaxRequestTarget target) {
SearchResultsRow row = (SearchResultsRow) rowItem.getModelObject();
row.setSelected(!row.isSelected());
parent.updateSearchResults(target);
}
});
return rowItem;
}
Is it possible to select multiple rows in Wicket by using clicking on a row, pressing the shift key and then clicking on another row?
I am using Wicket 6.20. I have figured out the code to select a single row, but I am not sure how to add the AJAX event to determine if the user has pressed the shift-key.
@Override
protected Item<T> newRowItem(final String id, final int index, final IModel<T> model) {
final Item<T> rowItem = new OddEvenItem<>(id, index, model);
rowItem.add(new AjaxEventBehavior("onclick") {
private static final long serialVersionUID = 6720512493017210281L;
@Override
protected void onEvent(AjaxRequestTarget target) {
SearchResultsRow row = (SearchResultsRow) rowItem.getModelObject();
row.setSelected(!row.isSelected());
parent.updateSearchResults(target);
}
});
return rowItem;
}
Share
Improve this question
asked Jan 19, 2016 at 21:56
Michael MitchellMichael Mitchell
412 bronze badges
5 Answers
Reset to default 6I use this snippet for shift / ctrl ajax-click:
public class AjaxClickWithKeysBehavior extends AjaxEventBehavior
{
public AjaxClickWithKeysBehavior()
{
super( "click" );
}
@Override
protected void updateAjaxAttributes( AjaxRequestAttributes attributes )
{
super.updateAjaxAttributes( attributes );
attributes.getDynamicExtraParameters().add( "return {'ctrl' : attrs.event.ctrlKey, 'shift' : attrs.event.shiftKey}" );
}
@Override
protected void onEvent( AjaxRequestTarget target )
{
final RequestCycle requestCycle = RequestCycle.get();
boolean isCtrl = requestCycle.getRequest().getRequestParameters().getParameterValue( "ctrl" ).toBoolean( false );
boolean isShift = requestCycle.getRequest().getRequestParameters().getParameterValue( "shift" ).toBoolean( false );
this.onClick( target, isCtrl, isShift );
}
protected void onClick( AjaxRequestTarget target, boolean isCtrl, boolean isShift )
{
}
}
WicketStuff-DataTables provides integration with https://datatables/. By using its Select extension it is possible to select rows as you need.
I just added support for the Select extension to master
branch. It will be available with WicketStuff 7.2.0. You can see it in action in the infinite/virtual scroll example.
Here is a version that you can drop-in where you use a standard ajaxlink:
public abstract class KeyedAjaxLink extends AjaxLink<Object> {
private static final long serialVersionUID = 1L;
/**
* @param p_id
*/
public KeyedAjaxLink( String p_id ) {
super( p_id );
}
/**
* @param p_id
* @param p_model
*/
public KeyedAjaxLink( String p_id, IModel<Object> p_model ) {
super( p_id, p_model );
}
@Override
protected void updateAjaxAttributes( AjaxRequestAttributes p_attributes ) {
super.updateAjaxAttributes( p_attributes );
p_attributes.getDynamicExtraParameters().add( "return {'ctrl' : attrs.event.ctrlKey, 'shift' : attrs.event.shiftKey, 'alt' : attrs.event.altKey }" );
}
protected boolean isShiftPressed() {
return isPressed( "shift" );
}
protected boolean isCtrlPressed() {
return isPressed( "ctrl" );
}
protected boolean isAltPressed() {
return isPressed( "alt" );
}
protected boolean isPressed( String p_keyCode ) {
return RequestCycle.get().getRequest().getRequestParameters().getParameterValue( p_keyCode ).toBoolean( false );
}
}
Just curious; why not using list view with checkbox for this? The solution to what you are trying to achieve seems more of Javascript coding then Wicket itself. I am sure you could find multiple answers on Stackoverflow for achieving multi row select from javascript.
For Wicket list view with checkbox, you can look at: https://cwiki.apache/confluence/display/WICKET/Listview+with+checkboxes
You might have valid reason to go with shift+click. But it might restrict you for the page you are on (if your table has pagination), and also without retaining the selection when e back.
Yes, it's possible. There are ponent org.apache.wicket.markup.html.form.ListMultipleChoice so I think you must use it.
This ponent provide behavior that you expect. You can read documentation in Wicket Docs
Is it possible to select multiple rows in Wicket by using clicking on a row, pressing the shift key and then clicking on another row?
I am using Wicket 6.20. I have figured out the code to select a single row, but I am not sure how to add the AJAX event to determine if the user has pressed the shift-key.
@Override
protected Item<T> newRowItem(final String id, final int index, final IModel<T> model) {
final Item<T> rowItem = new OddEvenItem<>(id, index, model);
rowItem.add(new AjaxEventBehavior("onclick") {
private static final long serialVersionUID = 6720512493017210281L;
@Override
protected void onEvent(AjaxRequestTarget target) {
SearchResultsRow row = (SearchResultsRow) rowItem.getModelObject();
row.setSelected(!row.isSelected());
parent.updateSearchResults(target);
}
});
return rowItem;
}
Is it possible to select multiple rows in Wicket by using clicking on a row, pressing the shift key and then clicking on another row?
I am using Wicket 6.20. I have figured out the code to select a single row, but I am not sure how to add the AJAX event to determine if the user has pressed the shift-key.
@Override
protected Item<T> newRowItem(final String id, final int index, final IModel<T> model) {
final Item<T> rowItem = new OddEvenItem<>(id, index, model);
rowItem.add(new AjaxEventBehavior("onclick") {
private static final long serialVersionUID = 6720512493017210281L;
@Override
protected void onEvent(AjaxRequestTarget target) {
SearchResultsRow row = (SearchResultsRow) rowItem.getModelObject();
row.setSelected(!row.isSelected());
parent.updateSearchResults(target);
}
});
return rowItem;
}
Share
Improve this question
asked Jan 19, 2016 at 21:56
Michael MitchellMichael Mitchell
412 bronze badges
5 Answers
Reset to default 6I use this snippet for shift / ctrl ajax-click:
public class AjaxClickWithKeysBehavior extends AjaxEventBehavior
{
public AjaxClickWithKeysBehavior()
{
super( "click" );
}
@Override
protected void updateAjaxAttributes( AjaxRequestAttributes attributes )
{
super.updateAjaxAttributes( attributes );
attributes.getDynamicExtraParameters().add( "return {'ctrl' : attrs.event.ctrlKey, 'shift' : attrs.event.shiftKey}" );
}
@Override
protected void onEvent( AjaxRequestTarget target )
{
final RequestCycle requestCycle = RequestCycle.get();
boolean isCtrl = requestCycle.getRequest().getRequestParameters().getParameterValue( "ctrl" ).toBoolean( false );
boolean isShift = requestCycle.getRequest().getRequestParameters().getParameterValue( "shift" ).toBoolean( false );
this.onClick( target, isCtrl, isShift );
}
protected void onClick( AjaxRequestTarget target, boolean isCtrl, boolean isShift )
{
}
}
WicketStuff-DataTables provides integration with https://datatables/. By using its Select extension it is possible to select rows as you need.
I just added support for the Select extension to master
branch. It will be available with WicketStuff 7.2.0. You can see it in action in the infinite/virtual scroll example.
Here is a version that you can drop-in where you use a standard ajaxlink:
public abstract class KeyedAjaxLink extends AjaxLink<Object> {
private static final long serialVersionUID = 1L;
/**
* @param p_id
*/
public KeyedAjaxLink( String p_id ) {
super( p_id );
}
/**
* @param p_id
* @param p_model
*/
public KeyedAjaxLink( String p_id, IModel<Object> p_model ) {
super( p_id, p_model );
}
@Override
protected void updateAjaxAttributes( AjaxRequestAttributes p_attributes ) {
super.updateAjaxAttributes( p_attributes );
p_attributes.getDynamicExtraParameters().add( "return {'ctrl' : attrs.event.ctrlKey, 'shift' : attrs.event.shiftKey, 'alt' : attrs.event.altKey }" );
}
protected boolean isShiftPressed() {
return isPressed( "shift" );
}
protected boolean isCtrlPressed() {
return isPressed( "ctrl" );
}
protected boolean isAltPressed() {
return isPressed( "alt" );
}
protected boolean isPressed( String p_keyCode ) {
return RequestCycle.get().getRequest().getRequestParameters().getParameterValue( p_keyCode ).toBoolean( false );
}
}
Just curious; why not using list view with checkbox for this? The solution to what you are trying to achieve seems more of Javascript coding then Wicket itself. I am sure you could find multiple answers on Stackoverflow for achieving multi row select from javascript.
For Wicket list view with checkbox, you can look at: https://cwiki.apache/confluence/display/WICKET/Listview+with+checkboxes
You might have valid reason to go with shift+click. But it might restrict you for the page you are on (if your table has pagination), and also without retaining the selection when e back.
Yes, it's possible. There are ponent org.apache.wicket.markup.html.form.ListMultipleChoice so I think you must use it.
This ponent provide behavior that you expect. You can read documentation in Wicket Docs
本文标签: javascriptWicket Select Multiple Rows (ShiftClick)Stack Overflow
版权声明:本文标题:javascript - Wicket: Select Multiple Rows (Shift-Click) - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745624038a2159750.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论