JTree - full row select

Hi,
I would like to make the JTree tree items selectable/appearing like in the eclipse "Package Explorer". A tree item should become selected when the user clicks anywhere in it's row. Additionally the background color of the full row should be the selection-background color not only the label background.
Any ideas how to do this ? I hope there is a solution for this, but I have doubts about it because of how the CellRenderer thing works.
Thanks in advance,
Christian

Hi
The mouse listener in that solution doesn't properly handle SHIFT/CTRL.
This should work better:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicTreeUI;
import javax.swing.tree.TreePath;
public class ExplorerTreeUI extends BasicTreeUI {
    private Color backgroundSelectionColor = null;
    private RowSelectionListener sf = new RowSelectionListener();
    protected void installDefaults() {
        super.installDefaults();
        backgroundSelectionColor = UIManager.getColor("Tree.selectionBackground");
    protected void paintRow(Graphics g, Rectangle clipBounds,
            Insets insets, Rectangle bounds, TreePath path,
            int row, boolean isExpanded,
            boolean hasBeenExpanded, boolean isLeaf) {
        // Don't paint the renderer if editing this row.
        if (editingComponent != null && editingRow == row)
            return;
        if (tree.isRowSelected(row)) {
            int h = tree.getRowHeight();
            g.setColor(backgroundSelectionColor);
            g.fillRect(clipBounds.x, h*row, clipBounds.width, h);
        super.paintRow(g, clipBounds, insets, bounds, path, row, isExpanded,
                hasBeenExpanded, isLeaf);
    protected void installListeners() {
        super.installListeners();
        tree.addMouseListener(sf);
    protected void uninstallListeners() {
        tree.removeMouseListener(sf);
        super.uninstallListeners();
    private class RowSelectionListener extends MouseAdapter {
                     * Listener for selecting the entire rows.
                     * @author Kirill Grouchnikov
        @Override
        public void mousePressed(MouseEvent e) {
            if (!tree.isEnabled())
                return;
            TreePath closestPath = tree.getClosestPathForLocation(e.getX(), e.getY());
            if (closestPath == null)
                return;
            Rectangle bounds = tree.getPathBounds(closestPath);
            // Process events outside the immediate bounds -
            // This properly handles Ctrl and Shift
            // selections on trees.
            if ((e.getY() >= bounds.y)
                    && (e.getY() < (bounds.y + bounds.height))
                    && ((e.getX() < bounds.x) || (e.getX() > (bounds.x + bounds.width)))) {
                // fix - don't select a node if the click was on the
                // expand control
                if (isLocationInExpandControl(closestPath, e.getX(), e.getY())) {
                    return;
                selectPathForEvent(closestPath, e);
}

Similar Messages

  • SQL Developer 1.2.1, SQL Worksheet, Full Row Select

    I was wondering if there was a way in the worksheet under 1.2.1 to do a full row select when viewing. When only columns are selected, it makes it a little difficult to scroll to the right on large records and still know which record is the current one when there is quite a bit of data, both columns and rows.

    If I'm reading your question right, all you have to do is click once on the left hand side of the row in the results section (where the pseudo-generated row number is)

  • Copy/paste full row, full column, a cell on datagrid using MVVM?

    What is the best way to implement on datagrid? As I am new on this, I had some researches but I am confused because there are some complicated implementations and easy ones? I try to understand the best way.
    Adding simply selection mode and selection Unit doesnt help. Because it only copies the row but I cant paste it simply as a new row.
     SelectionMode="Extended" SelectionUnit="FullRow" >
    this approach in the article looks old to me. Not sure if there is anything new and much easier with newest framework. I am using MVVM light in my project.
    Attached is the sample project similar to my original project. can you please recommend me the best way for the following?
    - Full Row(s) copy-paste
    -1 or multiple columns copy-paste (optional)
    - cell copy-paste
    "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."

    I found the code out my project.  I last looked at this back in 2011.
    This is a custom control inheriting from datagrid.
    I don't recall where I got this code from originally.
    public class CustomDataGrid : DataGrid
    static CustomDataGrid()
    CommandManager.RegisterClassCommandBinding(
    typeof(CustomDataGrid),
    new CommandBinding(ApplicationCommands.Paste,
    new ExecutedRoutedEventHandler(OnExecutedPaste),
    new CanExecuteRoutedEventHandler(OnCanExecutePaste)));
    #region Clipboard Paste
    private static void OnCanExecutePaste(object target, CanExecuteRoutedEventArgs args)
    ((CustomDataGrid)target).OnCanExecutePaste(args);
    /// <summary>
    /// This virtual method is called when ApplicationCommands.Paste command query its state.
    /// </summary>
    /// <param name="args"></param>
    protected virtual void OnCanExecutePaste(CanExecuteRoutedEventArgs args)
    args.CanExecute = CurrentCell != null;
    args.Handled = true;
    private static void OnExecutedPaste(object target, ExecutedRoutedEventArgs args)
    ((CustomDataGrid)target).OnExecutedPaste(args);
    /// <summary>
    /// This virtual method is called when ApplicationCommands.Paste command is executed.
    /// </summary>
    /// <param name="args"></param>
    protected virtual void OnExecutedPaste(ExecutedRoutedEventArgs args)
    // parse the clipboard data
    List<string[]> rowData = ClipboardHelper.ParseClipboardData();
    bool hasAddedNewRow = false;
    // call OnPastingCellClipboardContent for each cell
    int minRowIndex = Items.IndexOf(CurrentItem);
    int maxRowIndex = Items.Count - 1;
    int minColumnDisplayIndex = (SelectionUnit != DataGridSelectionUnit.FullRow) ? Columns.IndexOf(CurrentColumn) : 0;
    int maxColumnDisplayIndex = Columns.Count - 1;
    int rowDataIndex = 0;
    for (int i = minRowIndex; i <= maxRowIndex && rowDataIndex < rowData.Count; i++, rowDataIndex++)
    if (CanUserPasteToNewRows && CanUserAddRows && i == maxRowIndex)
    // add a new row to be pasted to
    ICollectionView cv = CollectionViewSource.GetDefaultView(Items);
    IEditableCollectionView iecv = cv as IEditableCollectionView;
    if (iecv != null)
    hasAddedNewRow = true;
    iecv.AddNew();
    if (rowDataIndex + 1 < rowData.Count)
    // still has more items to paste, update the maxRowIndex
    maxRowIndex = Items.Count - 1;
    else if (i == maxRowIndex)
    continue;
    int columnDataIndex = 0;
    for (int j = minColumnDisplayIndex; j <= maxColumnDisplayIndex && columnDataIndex < rowData[rowDataIndex].Length; j++, columnDataIndex++)
    DataGridColumn column = ColumnFromDisplayIndex(j);
    column.OnPastingCellClipboardContent(Items[i], rowData[rowDataIndex][columnDataIndex]);
    // update selection
    if (hasAddedNewRow)
    UnselectAll();
    UnselectAllCells();
    CurrentItem = Items[minRowIndex];
    if (SelectionUnit == DataGridSelectionUnit.FullRow)
    SelectedItem = Items[minRowIndex];
    else if (SelectionUnit == DataGridSelectionUnit.CellOrRowHeader ||
    SelectionUnit == DataGridSelectionUnit.Cell)
    SelectedCells.Add(new DataGridCellInfo(Items[minRowIndex], Columns[minColumnDisplayIndex]));
    /// <summary>
    /// Whether the end-user can add new rows to the ItemsSource.
    /// </summary>
    public bool CanUserPasteToNewRows
    get { return (bool)GetValue(CanUserPasteToNewRowsProperty); }
    set { SetValue(CanUserPasteToNewRowsProperty, value); }
    /// <summary>
    /// DependencyProperty for CanUserAddRows.
    /// </summary>
    public static readonly DependencyProperty CanUserPasteToNewRowsProperty =
    DependencyProperty.Register("CanUserPasteToNewRows",
    typeof(bool), typeof(CustomDataGrid),
    new FrameworkPropertyMetadata(true, null, null));
    #endregion Clipboard Paste
    I used to be a points hound.
    But I'm alright nooooooooooooooooooooooooooooOOOOOWWWW !

  • Ttitle not displaying the title when no rows selected from a table

    My requirement is display the Ttitle value even when there are no rows fetched from a table. I tried the following -it didn't work. We are on Oracle 9.2.0.7.0. Anybody has thoughts on this... your help greatly appreciated.
    ORACLE_SID = [oracle] ? ABCDE
    PSDEVDB1:>sqlplus babu
    SQL*Plus: Release 9.2.0.7.0 - Production on Mon Jul 10 17:56:52 2006
    Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
    Enter password:
    Connected to:
    Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.7.0 - Production
    SQL> ttitle center 'testing'
    SQL> column x noprint
    SQL> select 'x' x from dual;
    testing
    SQL> select *from mytable3;
    testing
    NAME NO
    KUMAR 10
    RAMU 10
    BABU 10
    SQL> select *from mytable3 where no=20;
    no rows selected
    SQL>

    If your concepts are clear for Right outer join, Left outer join and Full outer join you can achieve what you are looking for.
    http://www.oreillynet.com/pub/a/network/2002/04/23/fulljoin.html
    Play with the data and may the force be with you.

  • How to dynamically display the data from a table base on row selection of another table in ADF

    Hi ,
    I have a requirement in ADF. I need to change the data of a table  based on row selection of another Table . Both the table have a Parent Child relationship between them. They have a common attribute say department_id.
                                                                                         For this I created bind variable in view object of employees table and wrote a where clause in the sql query using that bind variable. Then I created method for selection listener of department Table in java bean.
    My method is following
        public void onrowselection(SelectionEvent selectionEvent) {
            RichTable richTable = (RichTable)selectionEvent.getSource();
                            CollectionModel tableModel = (CollectionModel)richTable.getValue();
                            JUCtrlHierBinding adfTableBinding = (JUCtrlHierBinding)tableModel.getWrappedData();
                            Object selectedRowData = richTable.getSelectedRowData();
                            JUCtrlHierNodeBinding nodeBinding = (JUCtrlHierNodeBinding)selectedRowData;
                    oracle.jbo.domain.Number newVal = (oracle.jbo.domain.Number) nodeBinding.getAttribute("DepartmentId");
                    Number pallet = newVal.bigDecimalValue();
                    System.out.println("Selected values " + pallet);
            BindingContext bindingctx = BindingContext.getCurrent();
                          BindingContainer bindings = bindingctx.getCurrentBindingsEntry();
                          DCBindingContainer bindingsImpl = (DCBindingContainer) bindings;
                  DCIteratorBinding dciter = bindingsImpl.findIteratorBinding("EmployeesView1Iterator");//access the iterator by its ID value in the PageDef file
                          ViewObject vo =dciter.getViewObject();
                          vo.setNamedWhereClauseParam("DepartmentId", pallet);//enter your value
                          vo.executeQuery();
    It is printing the selected value of department id from department table in the log. But it is not able to pass the value to employees view. It is showing the following error in the log
    "Definition DepartmentId of type Variable is not found in EmployeesView1."
    I will be very thankful if someone helps me to solve this errror or is there any other way to achieve the same requirement.
    Thanks
    Nilesh

    Note quite sure why you simply wont create a viewlink for the viewobject the tables are based on..
    The viewlink attribute will be based on the departmentId and it's a simple master detail relationship which automatically uses ppr.
    However, if both tables are on the same page; using your hack about;
    On the underlying viewobject, define a viewcriteria e.g. "listById" and set your bind variable here.
    I would bind table two to a RichTable component:
    RichTable t2;
    public void onrowselection(SelectionEvent selectionEvent) {
            RichTable richTable = (RichTable)selectionEvent.getSource();
                            CollectionModel tableModel = (CollectionModel)richTable.getValue();
                            JUCtrlHierBinding adfTableBinding = (JUCtrlHierBinding)tableModel.getWrappedData();
                            Object selectedRowData = richTable.getSelectedRowData();
                            JUCtrlHierNodeBinding nodeBinding = (JUCtrlHierNodeBinding)selectedRowData;
                    oracle.jbo.domain.Number newVal = (oracle.jbo.domain.Number) nodeBinding.getAttribute("DepartmentId");
                    Number pallet = newVal.bigDecimalValue();
                    System.out.println("Selected values " + pallet);
                   refreshTable2(pallet);
            BindingContext bindingctx = BindingContext.getCurrent();
                          BindingContainer bindings = bindingctx.getCurrentBindingsEntry();
                          DCBindingContainer bindingsImpl = (DCBindingContainer) bindings;
                  DCIteratorBinding dciter = bindingsImpl.findIteratorBinding("EmployeesView1Iterator");//access the iterator by its ID value in the PageDef file
                          ViewObject vo =dciter.getViewObject();
                          vo.setNamedWhereClauseParam("DepartmentId", pallet);//enter your value
                          vo.executeQuery();
    private void refreshTable2(Number pallet){
    RichTable x=getT2();
    CollectionModel cm=(CollectionModel)x.getValue();
    JUCtrlHierBinding jcb=(JUCtrlHierBinding)cm.getWrappedData();
    BindingContainer bindings = bindingctx.getCurrentBindingsEntry();
    DCBindingContainer bindingsImpl = (DCBindingContainer) bindings;
    DCIteratorBinding dciter = bindingsImpl.findIteratorBinding(jcb.getName()+"Iterator");
    ViewObject vo =dciter.getViewObject();
    ViewCriteriaManager vcm=vo.getViewCriteriaManager();
    ViewCriteria vc=vcm.getViewCriteria("listById");
    vo.applyViewCriteria(vc);
    vo.setNamedWhereClauseParam("DepartmentId",pallet);
    vo.executeQuery();
    AdfFacesContext.getCurrentInstance().addPartialTarget(getT2());

  • Not able to select and copy from adf table in IE and chrome if we enable row selection

    Hi All,
    We have an adf table and user wants to select and copy table cell values.
    We enabled row selection on adf table. Ifrow selection is in place, IE and Chrome are not allowing user to select and copy data. But Firefox is allowing.
    Do we have any solution to this? For our customer IE is the standard browser and they do test app on IE.
    Regards
    PavanKumar

    Hi Timo,
    Sorry forgot to mention versions.
    We are using 11.1.1.7 and IE 9.
    I tried in Google but could not get the solution.
    Kindly let me know solution for this.
    PavanKumar

  • Cell(Row) Selection not display in OOPS ALV

    Hi all,
    I am not able to get the cell(row) selection in the oops ALV when i called it second time.
    I am displaying some information using oops alv  in 100 screen. After user action on 100 screen i am calling 200 screen with different information which is also display in oops alv. When i displaying information in second time the cell(row) selection is not getting displayed.
    For both ALV the fieldcatelog is different.
    Initially i tried using same container but i face same problem, so i am trying to call second alv in new screen.
    But problem remain same.
    Can anyone help me to solve this problem ?
    Regards
    Nilesh

    hi,
    can u send ur report  so dat i can look furhter to it.and help u out

  • To determine the number of rows selected in a table view (BSP)

    Hi,
    My requirement is:
    I would be selecting 1 row from a table view ( which is made multiselect for another requirement) , and press a button.
    The functionality of button is to open a popup window based on the row selected.
    I want to display an error message if more than 1 row is selected, and button is clicked.
    Message will say that "you cannot select more than 1 row".
    For this,  I need to know how I can get the number of selected rows in a table view.
    I tried using the below code.
    But I feel this will work only in DO_HANDLE_DATA method.
    The popup would open, even before control comes in this method.
      CALL METHOD cl_hrrcf_iterator=>get_tv_index
        EXPORTING
          p_id               = p_tableview_id
          pt_form_fields = table_form_fields
        IMPORTING
          pt_indices      = sel_row_index_tab.
    Could you please provide me with a solution.
    Quick replies will be highly appreciated.
    Thanks,
    Nisha Vengal.

    Hi ,
    Your TV :
    <htmlb:tableView id              = "tv1l"
                                   design          = "alternating"
                                   visibleRowCount = "10"
                                   fillUpEmptyRows = "true"
                               onRowSelection  = "MyEventRowSelection" <----This is the event you have to use
                                   selectionMode   = "MULTILINEEDIT"
                                  filter          = "SERVER"
                                   table           = "<%= some table %>" >
    in DO_REQUEST:
    DATA:  tv                  TYPE REF TO cl_htmlb_tableview,
           tv_event          TYPE REF TO cl_htmlb_event_tableview ,
           event             TYPE REF TO if_htmlb_data.
    event = cl_htmlb_manager=>get_event( request ).
    IF event IS NOT INITIAL AND event->event_name = htmlb_events=>tableview.
      tv_event ?= event.
      CASE event->event_server_name.
        WHEN 'MyEventRowSelection'.
    count = count + 1 .
    if count ne 1 .
    errmsg = 'Your message'.
    endif.
    ENDCASE.
    ENDIF.
    in View/Layout:
    <% if errmsg is not initial. %>
    <s cript t y p e   =   t e x t / j a v a s c r i p t >
    a l e r t ("<%= errmsg %>") .
    </ s c r i p t>
    <% clear errmsg. %>
    <% endif. %>
    errmsg is a class attribute of type string and count is also a class attribute of type c .
    Regards,
    Anubhav.
    Reward if useful
    Edited by: Anubhav Jain on Sep 19, 2008 3:08 PM

  • How to avoid table refresh on row selection

    Hi,
    I have a table where the row selection happens on selecting the check box in the first column of the row. The check box is bound to the transient Boolean attribute of my VO to support this functionality which is missing in new version of ADF. The selection is working fine, however I am facing the issue with table refresh. Everytime I click checkbox to select or unselect a row my whole table is getting refreshed which is very unusual for user point of view. This is my code for the checkbox column:
    <af:column sortProperty="isSelected" sortable="true"
    headerText="#{bindings.pricingObjects.hints.isSelected.label}"
    id="c4"
    inlineStyle='#{(row.isSelected)?"background-color: #E7E7E7":""};'>
    <af:selectBooleanCheckbox value="#{row.bindings.isSelected.inputValue}"
    required="#{bindings.pricingObjects.hints.isSelected.mandatory}"
    shortDesc="#{bindings.pricingObjects.hints.isSelected.tooltip}"
    id="it4" simple="true"
    autoSubmit="true">
    <f:validator binding="#{row.bindings.isSelected.validator}"/>
    </af:selectBooleanCheckbox>
    I have to keep autoSubmit="true" on selectBooleanCheckbox because the table has to change color of the row everytime the checkbox is selected or deselected. Also, there are multiple commandToolbarButton such as "Delete" which needs to be enabled/disabled depending on the row selection.
    Is there anyway, I can achieve this behaviour with minimal refresh of table?

    Hi Marge,
    Yes I do have Add and Delete toolbar button in the panelCollection and also set partialTrigger="tableId" on them. I need this partialTriggers because Delete button should enable/disable depending on number of rows added in the table. However, I tried removing them but it did not work for me, table is still refreshing. BUT this solution does work in combination of other solution i.e. removing ChangeEventPolicy="ppr" on the iterator. I need ppr because I have a form which is bound to the same iterator and should change on table selection. The design is like this,
    - Read-only Table on top
    - Editable Form below
    - Select the row in table and edit the fields in the form
    If I remove ppr then my form is not updating with the row selection.
    Regards,
    Afroz

  • Reset Row Selection from Web Item Analysis in WAD 7.0

    Hi All,
    I have a Web Item Type Analysis and I use the Row Selection (SELECT_ROWS) value multiple.
    Is there a way to reset the selection via a function?
    The user select some rows and start a planning function via a button. If they would like to start the function for an other selection they first have to remove the old ones and have to mark the other lines.
    A function to remove all selection from the item is needed!
    PS: It is getting funny if there is paging and the selection is not even visible because it is on an other page.
    Thanks for help.

    Hello All.
    I have exaclty the same problem now.
    Is there any way to do this?
    Thanks a lot and best regards,
    Alfonso.

  • Help needed in row selection in Tabular form across pages

    Hi,
    I have a tabular form report similar to http://htmldb.oracle.com/pls/otn/f?p=31517:95. I want to select some rows from first page and then use the pagination to get to the next page, select some more rows and hit the submit button for processing. The rows selected in the last page alone are picked up for processing, and the ones selected in the earlier pages are lost. I see the same behaviour in Denes' example as well. I picked a row in the first page and a row in the next page, and then click "Pick Records", i see only the record i picked on the second page.
    I did play around with "partial page refresh" setting for the tabular form region, but that does not help.
    Is there a way to select across pages in a tabular form?
    thanks,
    Rams
    Edited by: rams1234 on Jan 22, 2009 10:19 AM

    Okay. I could make this work, but this seems to be a roundabout way for me. In my case I dont have any database related query to get the values, hence the Application level process may not be needed.
    When I select the checkbox, i get the value. I am hoping that I should be able to send the value to a javascript function and update the filed value in the function itself. Please see the function below..
    function setFileID(pThis) {
    var chkvals=pThis.value;
    var fldValue = new $x('f_FILELIST').value ;
    if (fldValue != 0)
    { $x('f_FILELIST').value= fldValue+'-'+chkvals;}
    else
    { $x('f_FILELIST').value = chkvals ;}
    This function works fine in making up the list. The issue is, when an already selected row is unselected, the value of the checkbox gets added one more time :) If I detect the checkbox status and subtract the corresponding value, this will be perfect..
    Thanks for the link anyway. I am marking this question answered.
    regards,
    Rams.
    Edited by: rams1234 on Jan 22, 2009 1:18 PM

  • How to populate a table based on a row selection from another table.

    Hi, i just started to use ADF BC and Faces. Could some one help me or point me a solution on the following scenario .
    By using a search component , a table is being displayed as a search result. If i select any row in the resulted table , i need to populate an another table at the bottom of the same page from another view. These two tables are related by primary key . May i know how to populate a table based on a row selection from another table. Thanks
    ganesh

    I understand your requirement and the tutorial doesn't talk about Association between the views so that you can create a Master-Detail or in DB parlance, a Parent-Child relationship.
    I will assume that we are dealing with two entities here: Department and Employees where a particular Department has many Employees and hence a Parent-Child relationship.
    Firstly, you need to create an Association between the two Entities - Department and Employees. You can do that by right clicking on the model's entity and then associating the two entities with the appropriate key say, DepartmentId.
    Once you have done that, you need to link the two entities in the View section with this Association that you created. Then go to AppModule and make sure that in the Available View Objects: 'EmployeesView' appears under 'DepartmentView' as "EmployeesView via <link you created>". Shuttle the 'DepartmentView' to the right, Data Model and then shuttle
    "EmployeesView via <link you created>" to the right, Data Model under 'DepartmentView'.
    This will then be reflected in your Data Controls. After that, you simply would have to drag this View into your page as a Master-Detail form...and then when you run this page, any row selected in the Master table, would display the data in the Detail table.
    Also, refer to this link: [Master-Detail|http://baigsorcl.blogspot.com/2010/03/creating-master-detail-form-in-adf.html]
    Hope this helps.

  • Af:fileDownloadActionListener picks wrong filename for the first time after row selection.

    Hi,
    I am using Oracle Jdeveloper 11g release 1. In one of my jspx pages i have a table, i can select one of the row and click on a button which invokes fileDownloadActionListener. The code of jspx is as below:
    <af:commandMenuItem text="#{coregccomplianceuiBundle.MENU_EXPORT}"
                                        id="CS19" partialSubmit="true"
                                        actionListener="#{viewScope.core_gccompliance_cs_librarybean.validateExport}"
                                        partialTriggers="CSftLib"
                                        disabled="#{viewScope.core_gccompliance_cs_librarybean.exportDisabled}">
    </af:commandMenuItem>
    <!--This button is set hidden, which is used to deal with the download job.
        The Export button on the page only does the validation. (whether it's a system defined standard)-->
      <af:commandButton text="#{coregccomplianceuiBundle.BTNEXPORTHIDDEN}" id="csl_csExportHidden"
                                          clientComponent="true" visible="false"
                                          partialSubmit="false">
    <af:fileDownloadActionListener contentType="application/x-download" 
                                          method="#{viewScope.core_gccompliance_cs_librarybean.handleExport}"
                                          filename="#{viewScope.core_gccompliance_cs_librarybean.fileName}"/> 
    </af:commandButton>
      /** force the ExportHidden Button to do export */
        function csExportHandler(event) {
            var exportCmd = AdfPage.PAGE.findComponent("emT:CS4:csl_csExportHidden");
            var actionEvent = new AdfActionEvent(exportCmd);
            actionEvent.forceFullSubmit();
            actionEvent.noResponseExpected();
            actionEvent.queue();
    The bean methods used in above block are as below:
    public void validateExport(ActionEvent actionEvent) {
           // checks if entity is system defined and shows error popup if it is .
            if (checkIsSystem())
                return;
            //Handle the export    
            AdfUtil.addScript("csExportHandler()");
    public void handleExport(FacesContext context, OutputStream out) {
            ComplianceLibraryAMImpl am = getDataController();
            HttpServletRequest request =
                (HttpServletRequest)context.getExternalContext().getRequest();
            Locale locale = NLSUtil.getClientLocale(request);
            ResourceBundle rb =
                ResourceBundle.getBundle("oracle.sysman.core.gccompliance.view.CoreGccomplianceUiMsg",
                                         locale);
            PreparedStatement st =
                am.getDBTransaction().createPreparedStatement("commit", 1);
            Connection conn = null;
            boolean isAgentSideCs = false;
            try {
                conn = st.getConnection();
                RichTable oTable = getCsTable();
                fileName = "ComplianceStandard.xml";
                List<Raw> exportGuids = new ArrayList<Raw>();
                for (Object opaqueFacesRowKey : oTable.getSelectedRowKeys()) {
                    oTable.setRowKey(opaqueFacesRowKey);
                    Object o = oTable.getRowData();
                    JUCtrlHierNodeBinding rowData = (JUCtrlHierNodeBinding)o;
                    exportGuids.add((Raw)rowData.getRow().getAttribute("CsGuid"));
                    int csType = ((oracle.jbo.domain.Number)rowData.getRow().getAttribute("CsType")).intValue();
                    if(csType == 4)
                        fileName =
                                (String)rowData.getRow().getAttribute("CsDname") + ".zip";
                        isAgentSideCs = true;
                    else
                        fileName =
                                (String)rowData.getRow().getAttribute("CsDname") + ".xml";
                    if(((Integer)rowData.getRow().getAttribute("IsSystem")).intValue() == 1){
                        throw(new ParseException(50));
                if (exportGuids.size() > 1)
                    fileName = "Compliancestandard_list.xml";
                RAW guid = new RAW(exportGuids.get(0).toString());
                if(isAgentSideCs)
                    getDataController().exportStandardContent(conn, out, guid);
                else
                    CsExport csexport = new CsExport(false);
                    csexport.doCsExport(conn, guid, false, out);
            } catch (ParseException e) {
                String errMsg = "";
                String errHdr = "";
                if(e.getStatus() == 50){
                    errMsg = rb.getString("ERRMSG_ISSYSTEMENTITY_EXPORT");
                    errHdr = rb.getString("ERRHDR_ISSYSTEMENTITY_EXPORT");
                else{
                    errMsg = rb.getString("ERRMSG_EXPORT_CS");
                    errHdr = rb.getString("ERRHDR_EXPORT_CS");
                AdfUtil.showMessageDialog(null, AdfUtil.MESSAGE_TYPE.ERROR, errHdr,
                                          errMsg, false, null);
                throw new RuntimeException(e);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            } finally {
                JDBCUtil.close(st);
            MimeUtil mimeUtil = new MimeUtil();
            mimeUtil.downloadFile(context, fileName);
            try {
                out.flush();
                out.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
    Class MimeUtil:
    public void downloadFile(FacesContext context, String fileName) {
            HttpServletResponse httpServletResponse =
                (HttpServletResponse)context.getExternalContext().getResponse();
            HttpServletRequest httpServletRequest =
                (HttpServletRequest) context.getExternalContext().getRequest();
            String unicodeFileName = fileName;
            String agent = httpServletRequest.getHeader("USER-AGENT").toLowerCase(Locale.US);
            boolean isIE = false;
            if (null != agent && -1 != agent.indexOf("msie"))
                isIE = true;
            //encode the output file name to support NLS
            unicodeFileName = MimeUtil.encodeFileName(fileName, isIE);
            httpServletResponse.setHeader("Content-disposition",
                                          "attachment;filename=\"" + unicodeFileName +
    httpServletResponse.setContentType("application/x-download");
            context.responseComplete();
            httpServletResponse.setContentType("application/x-download");
            context.responseComplete();
    Now when i come to the page for first time and select a row and click on Export then the filename that gets shown in save file dialog is incorrect (it shows partial adf taskflow name) , but when i select the row again by clicking on any other row and click export it shows correct filename i.e. selectedRowName.zip or .xml according to type of row selected.
    Can anybody suggest what am i missing?

    difficult to tell like this.but better you debug your code then you can get where you getting filename wrong.

  • JDev 11g-Multiple Row Selection Table-Ctrl+A error

    Hello All,
    Jdeveloper : Studio Edition Version 11.1.1.2.0, Build JDEVADF_11.1.1.2.0_GENERIC_091029.2229.5536
    ADF Business Components : 11.1.1.55.36
    Java(TM) Platform : 1.6.0_11
    Oracle IDE: 11.1.1.2.36.55.36
    SOA Composite Editor: 11.1.1.2.0.12.16
    Versioning Support: 11.1.1.2.36.55.36
    I am trying to remove the selected rows from the table with RowSelection property set to Multiple. I am able to select the rows using by holding key board Ctrl key and click on the rows. The following code in backing bean successfully deletes the rows selected using this step.
    public void removeGeoSpecs(ActionEvent actionEvent)
    RowKeySet rowKeySet = getGmemTbl().getSelectedRowKeys();
    CollectionModel collectionModel =
    (CollectionModel) getGmemTbl().getValue();
    for (Object facesTreeRowKey: rowKeySet)
    collectionModel.setRowKey(facesTreeRowKey);
    JUCtrlHierNodeBinding rowData =
    (JUCtrlHierNodeBinding) collectionModel.getRowData();
    rowData.getRow().remove();
    But when i select all the rows in the table using Ctrl+A, all the rows got selected. I hit the Remove button, then after deleting the first row, getting the following error.
    javax.servlet.ServletException: ADFv: Could not find row: USA 548 with key: oracle.jbo.Key[] inside parent: GeoSpecTVOIterator with key: null.
    Caused by: java.lang.IllegalStateException: ADFv: Could not find row: USA 548 with key: oracle.jbo.Key[] inside parent: GeoSpecTVOIterator with key: null.
    Here USA 548 is my first row's data. Please let me know if you want complete error stack.
    During design time, While drag and drop the table i have not selected Row Selection check box as it sets property for single row selection. Table is inside the <af:panelCollection> . Here is the table source.
    <af:table value="#{bindings.GeoSpecTVO.collectionModel}" var="row"
    rows="#{bindings.GeoSpecTVO.rangeSize}"
    emptyText="#{bindings.GeoSpecTVO.viewable ? 'No data to display.' : 'Access Denied.'}"
    fetchSize="#{bindings.GeoSpecTVO.rangeSize}"
    rowBandingInterval="0" id="GmemTbl"
    partialTriggers=":::AddRowsBtn :::AddRangeBtn ::RemoveBtn :::SaveBtn"
    rowSelection="multiple"
    binding="#{backingBeanScope.GeoGrpSpecBean.gmemTbl}">
    Here GeoSpecTVO is a transient view object which is not having query and not attached with EO.
    I tried to fix this issue by myself and also searched for similar issues in the FORUM and google. But no luck... I very much appreciate all your inputs/pointers. Kindly let me know if you need additional information.
    Thanks
    Annadurai.

    Hi Annadurai
    I tried the same work around but still i am facing the issue, could you please help me.
    public void deleteRec(ActionEvent actionEvent) {
    // Add event code here...
    RowKeySet rowKeySet = (RowKeySet)this.embossTB.getSelectedRowKeys();
    CollectionModel cm = (CollectionModel)this.embossTB.getValue();
    Row specRow = null;
    ArrayList rowList = new ArrayList();
    int listLength = 0;
    ArrayList<Number> printReqLST=new ArrayList<Number>();
    ViewObject vo1=null;
    boolean flag=false;
    for (Object facesTreeRowKey : rowKeySet) {
    cm.setRowKey(facesTreeRowKey);
    JUCtrlHierNodeBinding rowData = (JUCtrlHierNodeBinding)cm.getRowData();
    specRow = rowData.getRow();
    rowList.add(specRow);
    listLength++;
    for (int index = 0; index < listLength; index++){
    specRow = (Row)rowList.get(index);
    Number printReqID = (Number)specRow.getAttribute("PrintRequestId");
    String PrintState = specRow.getAttribute("PrintState").toString();
    if (PrintState.equalsIgnoreCase("PRINTED")) {
    System.out.println("cann't delete");
    FacesContext fctx = FacesContext.getCurrentInstance();
    FacesMessage message =
    new FacesMessage("Cann't Delete the selected row:" + printReqID);
    message.setSeverity(FacesMessage.SEVERITY_ERROR);
    fctx.addMessage(null, message);
    } else {
    System.out.println("delete");
    flag=true;
    specRow.remove();
    if(flag){
    System.out.println("before commit");
    commitRows();
    }

  • A Listener For JTable Row Selection Changed?

    Never mind... Thought of a couple other things after I posted and found ListSelectionListener. This looks like it fulfills my requirement nicely. - cimmerian76
    >>>
    TableModelListener isn't what I am looking for here. Basically, I'm looking for something that behaves in a way that is analogous to
    TreeSelectionListener's valueChanged(...). Perhaps I'm looking in the wrong places, but the only things I've found were RowSet listener (not even close)
    and TableModelListener (not exactly what I'm looking for - I'm not concerned about data in the table changing).
    The tool I'm writing displays additional information about the object in the row selected in an adjacent panel.
    This display should change every time a user selects a different row.
    I can mimic the behavior I want using a mouse listener on the table, so this isn't an emergency.
    It's more about curiosity. If I can find something that produces this functionality directly, I would prefer to use that.
    <<<
    Message was edited by:
    cimmerian76

    Hi,
    you can use this to handle selection events for the table:
    yourTable.getSelectionModel().addListSelectionListener(... );
    Now e.g. the class containing your main can implement interface ListSelectionListener.

Maybe you are looking for