Skip to Main Content

Java Development Tools

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Programmatically setting selected row on a table.

2750374Apr 24 2017 — edited May 1 2017

Im working with Jdeveloper 12.1.2.

I have a table based off a view iterator. On this table a have a custom Selection Listener. When the user selects a different row from the table it first checks that the required actions have been completed before allowing the user to change rows. This works in that it doesnt actually change the current row in the iterator, but the table will still highlight(select) the new row. Is there a way to set the selected row on a table?

This is what i have for the selection listener.

  1. public void tableSelectionListener(SelectionEvent selectionEvent) { 
  2.     String checkAllow = checkAllowFunc(); 
  3.          
  4.     if(checkAllow.equals("good")){ 
  5.             ADFUtil.invokeEL("#{bindings.testTableVO1.collectionModel.makeCurrent}", new Class[] {SelectionEvent.class},new Object[] { selectionEvent }); 
  6.     } 

Do i need an "else" with some specific code to revert the select? I hope that makes sense.

I would normally do my validations checks in the BC layer(as a business rule) but in this instance thats not an option.

This post has been answered by Ashish Awasthi on Apr 28 2017
Jump to Answer

Comments

Timo Hahn

Try setting the blockRowNavigationOnError to always and throw validation exception from your check method.

Timo

2750374

Hmm not sure if im missing something but the table is still allowing me to select a new row when its failing my validation check. Am i missing something with throwing the validation exception?

I set the block row navigation property to always on my table.

     blockRowNavigationOnError="always"

and i altered my function like so adding the throw validation exception.

  1. public void tableSelectionListener(SelectionEvent selectionEvent) { 
  2.  
  3.     String checkAllow = checkAllowFunc(); 
  4.  
  5.     if(checkAllow.equals("good")){ 
  6.             ADFUtil.invokeEL("#{bindings.testTableVO1.collectionModel.makeCurrent}", new Class[] {SelectionEvent.class},new Object[] { selectionEvent }); 
  7.     } 
  8.     else
  9.         try
  10.             throw new ValidationException("TEST"); 
  11.         } 
  12.         catch(Exception e){/*IGNORE*/
  13.     } 
  14. }
Ashish Awasthi
Answer

User do like this

public void selctListener(SelectionEvent selectionEvent) {

   //Getp previous selected row key

  RowKeySet oldKeySet = selectionEvent.getRemovedSet();

  RichTable table = (RichTable) selectionEvent.getSource();

   if (1 == 2) {

  invokeEL("#{bindings.DepartmentsVO1.collectionModel.makeCurrent}", new Class[] { SelectionEvent.class }, new Object[] {

  selectionEvent });

  } else {

  

  table.setSelectedRowKeys(oldKeySet);

  AdfFacesContext adfFacesCtx = AdfFacesContext.getCurrentInstance();

  adfFacesCtx.addPartialTarget(table);

  FacesContext fctx = FacesContext.getCurrentInstance();

  fctx.addMessage("Wrong Move", new FacesMessage("Can not select new row due to validation failure"));

  fctx.renderResponse();

  }

  }

replace if(1==2) with your condtion if(checkAllow.equals("good")

Ashish

Marked as Answer by 2750374 · Sep 27 2020
Ashish Awasthi

User have you tried it ?

2750374

Just got around to trying this. It worked perfectly! Thank you very much Ashish.

1 - 6
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on May 29 2017
Added on Apr 24 2017
6 comments
10,383 views