10 Replies Latest reply on May 5, 2007 8:28 AM by Mohammad Norouzi

    can I join a session with a conversation?

    Mohammad Norouzi Novice

      hello

      I have some beans in one conversation (or rather some pages) but I want to use another page which is in session scope and then back to last conversation and resume the job but when I enter the session scope page after pressing the button to go back it throws exception and tell me the conversation has been ended.

      is this possible? or I missed something to resolve that.

      here is my pages.xml:
      setting.xhtml is the page in session scope:

      <pages>
       <page view-id="/pages/main/searchQuery.xhtml" >
       <navigation from-action="#{indexSearch.search}">
       <rule if-outcome="resultQuery">
       <begin-conversation join="true" />
       <redirect view-id="/pages/main/resultQuery.xhtml" />
       </rule>
       </navigation>
       </page>
      
       <page view-id="/pages/main/setting.xhtml" >
       <navigation from-action="#{userSetting.continueNextPage}">
       <rule if-outcome="nextPage">
       <redirect view-id="/pages/main/resultQuery.xhtml" />
       </rule>
       </navigation>
       <navigation from-action="#{userSetting.apply}">
       <rule if-outcome="resultQuery">
       <redirect view-id="/pages/main/resultQuery.xhtml" />
       </rule>
       </navigation>
       </page>
      
       <page view-id="/pages/main/resultQuery.xhtml" conversation-required="true"
       no-conversation-view-id="/pages/main/searchQuery.xhtml">
       <navigation from-action="#{searchResult.back}">
       <rule if-outcome="back">
       <end-conversation/>
       <render view-id="/pages/main/searchQuery.xhtml" />
       </rule>
       </navigation>
       <navigation from-action="#{searchResult.setting}">
       <rule if-outcome="setting">
       <redirect view-id="/pages/main/setting.xhtml" />
       </rule>
       </navigation>
       </page>
      
       <page view-id="/login.xhtml">
       <navigation from-action="#{identity.login}">
       <rule if-outcome="success">
       <redirect view-id="/resultQuery.xhtml"/>
       </rule>
       </navigation>
       </page>
      </pages>
      


      thank you very much

        • 1. Re: can I join a session with a conversation?
          Pete Muir Master

          What you are saying makes no sense. Views aren't bound to conversations or the session, components are.

          • 2. Re: can I join a session with a conversation?
            Mohammad Norouzi Novice

             

            "petemuir" wrote:
            What you are saying makes no sense. Views aren't bound to conversations or the session, components are.


            well, I meant the same component, sorry I made mistake

            I want to go to a page which has a component in session scope but when I want to go back to conversation it says it has ended

            • 4. Re: can I join a session with a conversation?
              Mohammad Norouzi Novice

              here is the component in session scope:

              @Stateful
              @Name("userSetting")
              @Scope(ScopeType.SESSION)
              public class UserSettingAction implements UserSetting {
              
               private Log logger = LogFactory.getLog(SearchResultAction.class);
              
               private List<String> selectedItems;
              
               private List<String> categoryList;
              
               private HtmlSelectOneMenu selectOneCategory;
              
               private SelectItem categorySelectItem[];
               private SelectItem selectedCategory;
               private HtmlSelectManyPicklist picklist;
               private boolean sorted = false;
              
               @Out
               private String headerName;
              
               private ColumnHeaderList<ColumnHeader> columns;
              
               @Out
               private Map<Class, ColumnHeaderList<ColumnHeader>> columnHeaders;
              
               @Create
               @Begin(join=true)
               public void build() {
               logger.debug("Populating column headers....");
               selectedItems = new ArrayList<String>();
               categoryList = new ArrayList<String>();
               columnHeaders = new HashMap<Class, ColumnHeaderList<ColumnHeader>>();
               try {
               int j = 0;
               categorySelectItem = new SelectItem[Infrastructure.getStructure()
               .keySet().size()];
               for (Class cat : Infrastructure.getStructure().keySet()) {
               IndexRoot indexRoot = Infrastructure.getStructure().get(cat);
               SelectItem selectItem = new SelectItem(indexRoot.getClassName().getName(), indexRoot.getName());
               categorySelectItem[j] = selectItem;
               headerName = indexRoot.getName();
               ColumnHeaderList<ColumnHeader> columns = new ColumnHeaderList<ColumnHeader>();
               int i = 1;
               for (FieldData f : indexRoot.getFields()) {
               if (f.isExpanded())
               columns.add(new ColumnHeader(f.getOriginalName(), f
               .getAlias(), i, i <= 3));
               else
               columns.add(new ColumnHeader(f.getName(),
               f.getAlias(), i, i <= 3));
               ++i;
               }
               columnHeaders.put(indexRoot.getClassName(), columns);
               j++;
               }
              
               //set defaults...
               Class clazz = getClassFromName((String)categorySelectItem[0].getValue());
               selectOneCategory = new HtmlSelectOneMenu();
               picklist = new HtmlSelectManyPicklist();
               selectOneCategory.setValue((String)categorySelectItem[0].getValue());
               //columns = columnHeaders.get(clazz);
               setCurrentFields(clazz);
               } catch (Exception e) {
               logger.error("exception in loading column names:");
               e.printStackTrace();
               }
               }
              
               rest of the codes .......
              }
              


              • 5. Re: can I join a session with a conversation?
                Mohammad Norouzi Novice

                I think I put @Begin in wrong place because when the session is creating it will calls the @Create method and it is also lunches a conversation so this conversation is different from the next one that I will lunch later

                but I dont know, if I remove @Begin how can I notify to join to current conversation if the user clicks on the link or button to go in that page with session scope component (the above component)

                there is no attribute on pages.xml to define a page to join the current conversation.

                is there any way?

                • 6. Re: can I join a session with a conversation?
                  Pete Muir Master

                  You need to post *all* the code involved - not just random portions.

                  "mnrz" wrote:
                  I think I put @Begin in wrong place because when the session is creating it will calls the @Create method and it is also lunches a conversation so this conversation is different from the next one that I will lunch later


                  No, the conversation is join=true.

                  but I dont know, if I remove @Begin how can I notify to join to current conversation if the user clicks on the link or button to go in that page with session scope component (the above component)


                  A session scoped component will be able to inject stuff from the current conversation.

                  there is no attribute on pages.xml to define a page to join the current conversation.


                  <begin-conversation join="true" />


                  • 7. Re: can I join a session with a conversation?
                    Mohammad Norouzi Novice

                    ok

                    here is the page that has a button to go to setting.xhtml:

                    <?xml version="1.0" encoding="utf-8" ?>
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml"
                     xmlns:ui="http://java.sun.com/jsf/facelets"
                     xmlns:h="http://java.sun.com/jsf/html"
                     xmlns:t="http://myfaces.apache.org/tomahawk"
                     xmlns:s="http://myfaces.apache.org/sandbox"
                     xmlns:f="http://java.sun.com/jsf/core"
                     xmlns:c="http://java.sun.com/jstl/core"
                     xmlns:fn="http://java.sun.com/jsp/jstl/functions">
                    <ui:composition template="/pages/template.xhtml">
                     <ui:define name="topnav">
                     <ui:include src="/pages/incl/navbar.xhtml" />
                     </ui:define>
                     <ui:define name="body">
                     <f:view>
                     <h:form id="resultQuery">
                     <s:fieldset legend="Settings:" align="left">
                     <h:panelGrid bgcolor="#cccccc" columns="5">
                     <t:selectOneMenu id="rowPerPageOption" onchange="submit(this)"
                     valueChangeListener="#{searchResult.rowPerPageChanged}">
                     <f:selectItem itemLabel="5" itemValue="5" />
                     <f:selectItem itemLabel="10" itemValue="10" />
                     <f:selectItem itemLabel="20" itemValue="20" />
                     <f:selectItem itemLabel="30" itemValue="30" />
                     <f:selectItem itemLabel="40" itemValue="40" />
                     <f:selectItem itemLabel="50" itemValue="50" />
                     <f:selectItem itemLabel="100" itemValue="100" />
                     <f:selectItem itemLabel="200" itemValue="200" />
                     </t:selectOneMenu>
                    
                     <h:commandButton action="#{searchResult.setting}"
                     value="Columns..." />
                    
                     <h:commandButton actionListener="#{exportData.export}"
                     value="Export to Excel" />
                     <h:commandButton actionListener="#{exportDataIText.exportToPDF}"
                     value="Export to PDF" />
                     <h:commandButton actionListener="#{exportDataIText.exportToRTF}"
                     value="Export to Word" />
                    
                     <s:pprPanelGroup id="pprInlineMsg"
                     partialTriggers="resultQuery:rowPerPageOption"
                     inlineLoadingMessage="Loading..."></s:pprPanelGroup>
                    
                     <t:popup styleClass="popup" id="popupMenu">
                    
                     <h:outputText value="loading file"
                     rendered="#{exportData.loading}" />
                     <f:facet name="popup">
                     <h:panelGroup>
                     <h:panelGrid columns="1">
                     <ui:repeat value="#{exportData.listDownload}" var="down">
                     <h:commandLink action="#{dounloadFile.downloading}">
                     <f:param name="fileupload_type" value="#{down.contentType}" />
                     <f:param name="fileupload_name" value="#{down.filename}" />
                     <h:outputText value="#{down.filename}" />
                     </h:commandLink>
                     </ui:repeat>
                     </h:panelGrid>
                     </h:panelGroup>
                     </f:facet>
                     </t:popup>
                     </h:panelGrid>
                     </s:fieldset>
                     <hr />
                     <s:pprPanelGroup id="pprPanelall" align="center"
                     partialTriggers="resultQuery:rowPerPageOption">
                     <f:subview id="panelTabbedPane1" >
                     <t:panelTabbedPane style="text-align:center;" align="center"
                     serverSideTabSwitch="false">
                     <c:forEach items="#{searchResult.dataModels}" var="item">
                     <t:panelTab label="#{item.key.simpleName}">
                    
                     <h:panelGroup style="text-align:center;" align="center">
                     <t:dataTable id="#{fn:replace(item.key.simpleName,'\\.','_')}"
                     value="#{item.value}" sortAscending="#{ascending}"
                     sortColumn="#{sortColumn}" preserveSort="false" border="1"
                     rowOnMouseOver="this.style.backgroundColor='#cccccc'"
                     rowOnMouseOut="this.style.backgroundColor=''"
                     preserveDataModel="false" cellspacing="0" cellpadding="0"
                     rows="#{searchResult.rowPerPage}" width="80%"
                     rowIndexVar="rowIndex" style="text-align:center"
                     rowClasses="rowTable1, rowTable2" columnClasses="columnTable"
                     rules="groups" headerClass="headerTable"
                     footerClass="headerTable" styleClass="borderTable"
                     captionClass="titleTable" var="result" first="0">
                     <t:columns id="columns"
                     value="#{searchResult.selectedColumnHeaders[item.key]}"
                     var="columnHeader">
                     <f:facet name="header">
                     <h:outputText value="#{columnHeader.label}" />
                     </f:facet>
                     <!-- row is also available -->
                     <h:outputText rendered="true"
                     value="#{result[columnHeader.name]}" />
                     </t:columns>
                     <f:facet name="footer">
                     <h:panelGroup border="0" columns="20" width="100%"
                     rendered='#{searchResult.sizeOfQuery>=0}'>
                     <t:dataScroller dir="ltr" style="text-align:left"
                     for="#{fn:replace(item.key.simpleName,'\\.','_')}"
                     pageCountVar="pageCount" pageIndexVar="pageIndex"
                     rowsCountVar="rowsCount" firstRowIndexVar="firstRowIndex"
                     displayedRowsCountVar="displayedRowsCount" fastStep="10"
                     paginator="true" paginatorMaxPages="3"
                     paginatorActiveColumnStyle="font-weight:bold;">
                     <f:facet name="first">
                     <h:graphicImage border="0" alt="first"
                     url="/images/btn_first_16.gif" />
                     </f:facet>
                     <f:facet name="last">
                     <h:graphicImage border="0" alt="last"
                     url="/images/btn_last_16.gif" />
                     </f:facet>
                     <f:facet name="previous">
                     <h:graphicImage alt="previous" border="0"
                     url="/images/btn_prev_16.gif" />
                     </f:facet>
                     <f:facet name="next">
                     <h:graphicImage border="0" alt="next"
                     url="/images/btn_next_16.gif" />
                     </f:facet>
                     <h:outputLabel id="recordnumber" for="name" value="total:">
                     <h:outputText id="sizeOfOtherProviders"
                     styleClass="textOutput"
                     value=" #{searchResult.indexResultSet[item.key].maxRow} " />
                     </h:outputLabel>
                     <h:outputText value=" | " />
                     <h:outputLabel id="timedurationlabel" for="name"
                     value="time:">
                     <h:outputText id="timeDuration" styleClass="textOutput"
                     value=" #{searchResult.searchTimeDuration} milliseconds" />
                     </h:outputLabel>
                     <f:param value="#{rowsCount}/" />
                     <f:param value="#{displayedRowsCount}" />
                     <f:param value="#{firstRowIndex}" />
                     <f:param value="#{lastRowIndex}" />
                     <f:param value="#{pageIndex}" />
                     <f:param value="#{pageCount}" />
                     </t:dataScroller>
                     </h:panelGroup>
                     </f:facet>
                     </t:dataTable>
                     </h:panelGroup>
                     <h:panelGrid id="gridQuery" align="center"
                     style="text-align:center ; Background:#ddeeff "
                     dir="#{bundle['demo.dir']}" columns="2" border="0" width="80%">
                    
                     <h:commandButton id="backButton" action="#{searchResult.back}"
                     value="#{bundle['result.back']}" class="button" />
                     </h:panelGrid>
                    
                     </t:panelTab>
                     </c:forEach>
                     </t:panelTabbedPane>
                     </f:subview>
                     </s:pprPanelGroup>
                     </h:form>
                     </f:view>
                     </ui:define>
                    </ui:composition>
                    </html>
                    
                    


                    and this is the complete source of UserSettingsAction.java

                    @Stateful
                    @Name("userSetting")
                    @Scope(ScopeType.SESSION)
                    public class UserSettingAction implements UserSetting {
                    
                     private Log logger = LogFactory.getLog(SearchResultAction.class);
                    
                     private List<String> selectedItems;
                    
                     private List<String> categoryList;
                    
                     private HtmlSelectOneMenu selectOneCategory;
                    
                     private SelectItem categorySelectItem[];
                     private SelectItem selectedCategory;
                     private HtmlSelectManyPicklist picklist;
                     private boolean sorted = false;
                    
                     @Out
                     private String headerName;
                    
                     private ColumnHeaderList<ColumnHeader> columns;
                    
                     @Out
                     private Map<Class, ColumnHeaderList<ColumnHeader>> columnHeaders;
                    
                     @Create
                     @Begin(join = true)
                     public void build() {
                     logger.debug("Populating column headers....");
                     selectedItems = new ArrayList<String>();
                     categoryList = new ArrayList<String>();
                     columnHeaders = new HashMap<Class, ColumnHeaderList<ColumnHeader>>();
                     try {
                     int j = 0;
                     categorySelectItem = new SelectItem[Infrastructure.getStructure()
                     .keySet().size()];
                     for (Class cat : Infrastructure.getStructure().keySet()) {
                     IndexRoot indexRoot = Infrastructure.getStructure().get(cat);
                     SelectItem selectItem = new SelectItem(indexRoot.getClassName().getName(), indexRoot.getName());
                     categorySelectItem[j] = selectItem;
                     headerName = indexRoot.getName();
                     ColumnHeaderList<ColumnHeader> columns = new ColumnHeaderList<ColumnHeader>();
                     int i = 1;
                     for (FieldData f : indexRoot.getFields()) {
                     if (f.isExpanded())
                     columns.add(new ColumnHeader(f.getOriginalName(), f
                     .getAlias(), i, i <= 3));
                     else
                     columns.add(new ColumnHeader(f.getName(),
                     f.getAlias(), i, i <= 3));
                     ++i;
                     }
                     columnHeaders.put(indexRoot.getClassName(), columns);
                     j++;
                     }
                    
                     //set defaults...
                     Class clazz = getClassFromName((String)categorySelectItem[0].getValue());
                     selectOneCategory = new HtmlSelectOneMenu();
                     picklist = new HtmlSelectManyPicklist();
                     selectOneCategory.setValue((String)categorySelectItem[0].getValue());
                     //columns = columnHeaders.get(clazz);
                     setCurrentFields(clazz);
                     } catch (Exception e) {
                     logger.error("exception in loading column names:");
                     e.printStackTrace();
                     }
                     }
                    
                     public String continueNextPage() {
                     return "nextPage";
                     }
                    
                     public String apply() {
                     logger.debug("apply");
                     logger.debug("value:"+selectOneCategory.getValue());
                     //picklist.setSelectedValues()
                     Class clazz = getClassFromName((String)selectOneCategory.getValue());
                     logger.debug("class to apply:"+clazz);
                     applyChanges(clazz);
                     return "";
                     }
                    
                     private void applyChanges(Class clazz) {
                     int i = 0;
                     for (ColumnHeader ch : columnHeaders.get(clazz)) {
                     if (selectedItems.contains(ch.getName())) {
                     logger.debug("contains:"+ch.getName());
                     ch.setIndex(i);
                     ++i;
                     ch.setSelected(true);
                     } else {
                     logger.debug("NOT contains:"+ch.getName());
                     ch.setIndex(i);
                     ++i;
                     ch.setSelected(false);
                     }
                     }
                     }
                    
                     public void pickListValueChanged(ValueChangeEvent event) {
                     logger.debug("***********pickListValueChanged*************");
                     logger.debug("apply");
                     logger.debug("value:"+selectOneCategory.getValue());
                     //picklist.setSelectedValues()
                     Class clazz = getClassFromName((String)selectOneCategory.getValue());
                     logger.debug("class to apply:"+clazz);
                     applyChanges(clazz);
                    
                     }
                    
                     /**
                     * action then category changed
                     */
                     public void processValueChanged(ValueChangeEvent event) {
                     try {
                     selectOneCategory = (HtmlSelectOneMenu) event.getComponent();
                     logger.debug("new value:"+selectOneCategory.getValue());
                     Class newClass = getClassFromName((String)selectOneCategory.getValue());
                     logger.debug("new class to process:"+newClass);
                     setCurrentFields(newClass);
                     logger.debug("changes being applied");
                     } catch (Exception e) {
                     e.printStackTrace();
                     }
                     }
                    
                     /**
                     * set fields of current category
                     *
                     * @param indexRoot
                     */
                     private void setCurrentFields(Class clazz) {
                    // logger.debug("columns.size():"+columns.size());
                    // logger.debug("selectedItems.size():"+selectedItems.size());
                     columns = null;
                     selectedItems = null;
                     selectedItems = new ArrayList<String>();
                     selectedItems.clear();
                     columns = columnHeaders.get(clazz);
                     for (ColumnHeader ch : columns) {
                     if (ch.isSelected()) {
                     logger.debug("ch.getName():"+ch.getName());
                     selectedItems.add(ch.getName());
                     }
                     }
                     picklist.setSelectedValues(selectedItems.toArray());
                     logger.debug("columns.size():"+columns.size());
                     logger.debug("selectedItems.size():"+selectedItems.size());
                    
                     }
                    
                     public List<String> getSelectedItems() {
                     return selectedItems;
                     }
                    
                     public void setSelectedItems(List<String> selectedItems) {
                     this.selectedItems = selectedItems;
                     }
                    
                     public UserSettingAction() {
                     logger.debug("UserSettingAction constracted.");
                     }
                    
                     public ColumnHeaderList getColumns() {
                     if (!sorted) {
                     Collections.sort(columns, new Comparator<ColumnHeader>() {
                     public int compare(ColumnHeader ch1, ColumnHeader ch2) {
                     return ch1.getLabel().compareTo(ch2.getLabel());
                     }
                     });
                     sorted = true;
                     }
                     return columns;
                     }
                    
                     public void setColumns(ColumnHeaderList columns) {
                     this.columns = columns;
                     }
                    
                     public String getHeaderName() {
                     return headerName;
                     }
                    
                     public void setHeaderName(String headerName) {
                     this.headerName = headerName;
                     }
                    
                     public List<String> getCategoryList() {
                     return categoryList;
                     }
                    
                     public void setCategoryList(List<String> categoryList) {
                     this.categoryList = categoryList;
                     }
                    
                     public HtmlSelectOneMenu getSelectOneCategory() {
                     return selectOneCategory;
                     }
                    
                     public void setSelectOneCategory(HtmlSelectOneMenu selectOneCategory) {
                     this.selectOneCategory = selectOneCategory;
                     }
                    
                     public SelectItem[] getCategorySelectItem() {
                     return categorySelectItem;
                     }
                    
                     public void setCategorySelectItem(SelectItem[] categorySelectItem) {
                     this.categorySelectItem = categorySelectItem;
                     }
                    
                     @Destroy
                     @Remove
                     public void destroy() {
                     logger.debug("destroying UserSettingAction...");
                     }
                    
                     public Map<Class, ColumnHeaderList<ColumnHeader>> getColumnHeaders() {
                     return columnHeaders;
                     }
                    
                     public void setColumnHeaders(
                     Map<Class, ColumnHeaderList<ColumnHeader>> columnHeaders) {
                     this.columnHeaders = columnHeaders;
                     }
                    
                     private Class getClassFromName(String name) {
                     try {
                     return Class.forName(name);
                     } catch (ClassNotFoundException e) {
                     e.printStackTrace();
                     }
                     return null;
                     }
                    
                     public SelectItem getSelectedCategory() {
                     return selectedCategory;
                     }
                    
                     public void setSelectedCategory(SelectItem selectedCategory) {
                     this.selectedCategory = selectedCategory;
                     }
                    
                     public HtmlSelectManyPicklist getPicklist() {
                     return picklist;
                     }
                    
                     public void setPicklist(HtmlSelectManyPicklist picklist) {
                     this.picklist = picklist;
                     }
                    
                    }
                    
                    


                    and this is other component in conversation scope

                    @Stateful
                    @Name("searchResult")
                    @Scope(CONVERSATION)
                    public class SearchResultAction implements SearchResult , Serializable{
                    
                     private final static int MOVE_FORWARD = 1;
                     private final static int MOVE_BACKWARD = -1;
                    
                     @Out(required=false)
                     private Map<Class,javax.faces.model.DataModel> dataModels;
                     private boolean settingsHasChanged;
                     private Map<Class, ColumnHeaderList<ColumnHeader>> selectedColumnHeaders;
                    
                    // @In("#{userSetting.columnHeaders}")
                    // private ColumnHeaderList<ColumnHeader> columnHeaders;
                    
                     @In("#{userSetting.columnHeaders}")
                     private Map<Class, ColumnHeaderList<ColumnHeader>> columnHeaders;
                    
                     @In(required=true)
                     @Out
                     Map<Class,IndexResultSet> indexResultSet;
                    
                     @In
                     long searchTimeDuration;
                    
                     private String headerName;
                    
                     private Log logger = LogFactory.getLog(SearchResultAction.class);
                    
                     private int sizeOfQuery;
                    
                     private String sortColumn="textResultname";
                     private boolean ascending = false;
                     private int lastSizeOfList;
                     private Integer rowPerPage = 10;
                    
                     public SearchResultAction(){
                     logger.debug("starting SearchResultAction");
                     }
                    
                     @Factory("selectedColumnHeaders")
                     public void extractColumns() {
                     logger.debug("extractColumns...");
                     //ColumnHeaderList<ColumnHeader> columnHeaderList=new ColumnHeaderList<ColumnHeader>();
                     try {
                     selectedColumnHeaders = new HashMap<Class,ColumnHeaderList<ColumnHeader>>();
                     for(Class c:columnHeaders.keySet()) {
                     ColumnHeaderList<ColumnHeader> columnHeaderList = new ColumnHeaderList<ColumnHeader>();
                     for(ColumnHeader ch: columnHeaders.get(c)) {
                     if(ch.isSelected()) {
                     columnHeaderList.add(ch);
                     }
                     }
                     Collections.sort(columnHeaderList,new Comparator<ColumnHeader>() {
                     public int compare(ColumnHeader ch1,ColumnHeader ch2) {
                     return ch1.getIndex() < ch2.getIndex()?-1:1;
                     }
                     });
                     selectedColumnHeaders.put(c,columnHeaderList);
                     }
                    
                     } catch (Exception e) {
                     logger.error("exception in loading column names:");
                     e.printStackTrace();
                     }
                     }
                     @Create
                     public void setuplist(){
                     //if(indexResultSet == null || indexResultSet.getMaxRow() <= 0)
                    
                     settingsHasChanged = false;
                     logger.debug("beginning conversation in SearchResulAction");
                     setSizeOfQuery(100);
                     extractColumns();
                     }
                    
                     private void changesApplied() {
                     logger.debug("has changed.");
                     settingsHasChanged = true;
                     }
                     /**
                     * this method call after select one item off rowPerPageOption(combobox)
                     */
                     public void rowPerPageChanged(ValueChangeEvent e) {
                     logger.debug("Row Per page is:"+rowPerPage);
                     rowPerPage = Integer.valueOf((String)e.getNewValue());
                     logger.debug("Now row per page is:"+rowPerPage);
                     //dataModel = new LocalDataModel(rowPerPage,indexResultSet,selectedColumnHeaders);
                     }
                    
                     @SuppressWarnings(value = { "unchecked" })
                     public DataPage getDataPage(Class clazz,int startRow, int pageSize,IndexResultSet indexResultSet,ColumnHeaderList<ColumnHeader> _columnHeaderList) {
                     logger.debug("getting data page....");
                     logger.debug("start row:"+startRow);
                     logger.debug("page size:"+pageSize);
                     indexResultSet.absolute(startRow);
                     int start = startRow;
                     int last = startRow+pageSize;
                     List<Map<String,String>> rowList = new ArrayList<Map<String,String>>();
                     for(;start<last;++start) {
                     if (indexResultSet.next()) {
                     Map<String,String> colMap = new HashMap<String,String>();
                     for(ColumnHeader ch:_columnHeaderList) {
                     try {
                     colMap.put(ch.getName(),indexResultSet.getString(ch.getName()));
                     } catch (Exception e) {
                     e.printStackTrace();
                     }
                     }
                     rowList.add(colMap);
                     }
                     }
                     logger.debug("indexResultSet:"+indexResultSet);
                     logger.debug("Max Row:"+indexResultSet.getMaxRow());
                     DataPage dataPage = new DataPage(indexResultSet.getMaxRow(),startRow,rowList);
                     return dataPage;
                     }
                    
                     public String setting() {
                     changesApplied();
                     return "setting";
                     }
                     /**
                     * inner class implements the fetchPage() method for this special reason
                     * @author Mohammad Norouzi
                     * @version 1.0
                     * @since Mar 5, 2007
                     *
                     */
                     private class LocalDataModel extends PagedListDataModel implements Serializable{
                     IndexResultSet resultSet;
                     ColumnHeaderList<ColumnHeader> columnHeaderList;
                     private Class clazz;
                    
                     public LocalDataModel(Class clazz,int pageSize,IndexResultSet resultSet,ColumnHeaderList<ColumnHeader> _columnHeaderList) {
                     super(pageSize);
                     this.resultSet = resultSet;
                     this.columnHeaderList = _columnHeaderList;
                     try {
                     this.clazz = (clazz);
                     } catch (Exception e) {
                     e.printStackTrace();
                     }
                     }
                    
                     @Override
                     public DataPage fetchPage(int startRow, int pageSize) {
                     try{
                     return getDataPage(clazz,startRow,pageSize,resultSet,columnHeaderList);
                     }catch(Exception ee){
                     return null;
                     }
                     }
                    
                     }
                    
                     //least used methods
                     public long getSearchTimeDuration() {
                     return searchTimeDuration;
                     }
                    
                     @End
                     public String back(){
                     logger.debug("back() action method has been called.");
                     logger.debug("the current conversation is going to end...");
                     try{
                     if(indexResultSet != null /*|| !indexResultSet.isClosed()*/)
                     indexResultSet.clear();
                     }catch(Exception e){
                     e.getStackTrace();
                     }
                     setSizeOfQuery(0);
                     selectedColumnHeaders = null;
                     dataModels.clear();
                     dataModels = null;
                     searchTimeDuration = 0;
                     return "back" ;
                     }
                    
                     @Begin(join=true)
                     public Map<Class,javax.faces.model.DataModel> getDataModels() {
                     logger.debug("calling data model getter.");
                     if (dataModels == null) {
                     dataModels = new HashMap<Class, DataModel>();
                     for(Class c:selectedColumnHeaders.keySet()) {
                     try {
                     if(indexResultSet.get((c)) != null &&
                     indexResultSet.get((c)).getMaxRow() > 0) {
                     dataModels.put(c,new LocalDataModel(c,rowPerPage,indexResultSet.get((c)),selectedColumnHeaders.get(c)));
                     }
                     } catch (Exception e) {
                     e.printStackTrace();
                     }
                     }
                     }else if(settingsHasChanged) {
                     dataModels.clear();
                     dataModels = null;
                     extractColumns();
                     for(Class c:selectedColumnHeaders.keySet()) {
                     try {
                     if(indexResultSet.get((c)) != null &&
                     indexResultSet.get((c)).getMaxRow() > 0)
                     dataModels.put(c,new LocalDataModel(c,rowPerPage,indexResultSet.get((c)),selectedColumnHeaders.get(c)));
                     } catch (Exception e) {
                     e.printStackTrace();
                     }
                     }
                     settingsHasChanged = false;
                     }
                     return dataModels;
                     }
                    
                    
                     public Integer getRowPerPage() {
                     return rowPerPage;
                     }
                    
                     public void setRowPerPage(Integer rowPerPage) {
                     this.rowPerPage = rowPerPage;
                     }
                    
                     public String getHeaderName() {
                     return headerName;
                     }
                    
                     public void setHeaderName(String headerName) {
                     this.headerName = headerName;
                     }
                    
                    // public void setColumnHeaders(ColumnHeaderList<ColumnHeader> columnHeaders) {
                    // this.columnHeaders = columnHeaders;
                    // }
                    
                     public void setDataModels(Map<Class,javax.faces.model.DataModel> dataModels) {
                     this.dataModels = dataModels;
                     }
                     public Log getLogger() {
                     return logger;
                     }
                    
                     public void setLogger(Log logger) {
                     this.logger = logger;
                     }
                     public boolean getAscending() {
                     return ascending;
                     }
                    
                     public void setAscending(boolean ascending) {
                     this.ascending = ascending;
                     }
                    
                     protected boolean isDefaultAscending(String sortColumn){
                     return true;
                     }
                    
                     public int getSizeOfQuery() {
                     return sizeOfQuery;
                     }
                    
                     public void setSizeOfQuery(int sizeOfQuery) {
                     this.sizeOfQuery = sizeOfQuery;
                     }
                     public String getSortColumn() {
                     return sortColumn;
                     }
                    
                     public void setSortColumn(String sortColumn) {
                     this.sortColumn = sortColumn;
                     }
                     public Map<Class,IndexResultSet> getIndexResultSet() {
                     return indexResultSet;
                     }
                    
                     public void setIndexResultSet(Map<Class,IndexResultSet> indexResultSet) {
                     this.indexResultSet = indexResultSet;
                     }
                    
                    
                     @Deprecated
                     public Object getColumnValue() {
                     /**
                     * TODO this method should be revised since it has many bugs and overloads the system.
                     * TODO revising postponed to later time
                     */
                     Object columnValue = null;
                     return columnValue;
                     }
                    
                    // public ColumnHeaderList<ColumnHeader> getColumnHeaders() {
                    // return columnHeaders;
                    // }
                    
                     public Map<Class,ColumnHeaderList<ColumnHeader>> getSelectedColumnHeaders() {
                     return selectedColumnHeaders;
                     }
                    
                     public void setSelectedColumnHeaders(Map<Class,ColumnHeaderList<ColumnHeader>> selectedColumnHeaders) {
                     this.selectedColumnHeaders = selectedColumnHeaders;
                     }
                    
                     @Destroy
                     @Remove
                     public void destroy() {
                     logger.debug("destroying SearchResultAction...");
                     setSizeOfQuery(0);
                     try{
                     indexResultSet.clear();
                     }catch(Exception e){
                     e.getStackTrace();
                     }
                     }
                    
                     public Map<Class, ColumnHeaderList<ColumnHeader>> getColumnHeaders() {
                     return columnHeaders;
                     }
                    
                     public void setColumnHeaders(
                     Map<Class, ColumnHeaderList<ColumnHeader>> columnHeaders) {
                     this.columnHeaders = columnHeaders;
                     }
                     private Class getClassFromString(String className) throws ClassNotFoundException {
                     return Class.forName(className);
                     }
                    
                    }
                    
                    


                    • 8. Re: can I join a session with a conversation?
                      Mohammad Norouzi Novice

                      sorry and this is the setting.xhtml
                      and when I click on "continueButton" i want to go back to last conversatin
                      but I receive this message:
                      The conversation ended, timed out or was processing another request


                      <?xml version="1.0" encoding="utf-8" ?>
                      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                      <html xmlns="http://www.w3.org/1999/xhtml"
                       xmlns:ui="http://java.sun.com/jsf/facelets"
                       xmlns:h="http://java.sun.com/jsf/html"
                       xmlns:t="http://myfaces.apache.org/tomahawk"
                       xmlns:s="http://myfaces.apache.org/sandbox"
                       xmlns:f="http://java.sun.com/jsf/core"
                       xmlns:c="http://java.sun.com/jstl/core" >
                      <head>
                       <title>
                       Query Builder
                       </title>
                       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
                      </head>
                      <body>
                       <ui:composition template="/pages/template.xhtml">
                       <ui:define name="topnav">
                       <ui:include src="/pages/incl/navbar.xhtml" />
                       </ui:define>
                      
                       <ui:define name="body">
                       <f:view>
                       <h:form id="settingForm">
                      
                       <!--label for="categoryList1" value="select a category:" -->
                       <t:selectOneMenu id="categoryList1" required="true"
                       valueChangeListener="#{userSetting.processValueChanged}"
                       binding="#{userSetting.selectOneCategory}">
                       <f:selectItems id="selectcategory" value="#{userSetting.categorySelectItem}"/>
                       </t:selectOneMenu>
                       <h:commandButton id="loadButton" value="Load" class="button" />
                       <hr/>
                       <h:outputText id="headerNameOutput" value="select columns:" />
                       <!-- pprPanelGroup id="pprCategoryDropDown" align="center" partialTriggers="loadButton"-->
                       <s:selectManyPicklist id="pickList" size="10"
                       value="#{userSetting.selectedItems}" valueChangeListener="#{}">
                       <s:selectItems id="columnHeadersSelectItems" value="#{userSetting.columns}" var="column"
                       itemValue="#{column.name}" itemLabel="#{column.label}" />
                       </s:selectManyPicklist>
                       <hr/>
                       <h:commandButton id="applyButton" value="Apply" class="button" action="#{userSetting.apply}"/>
                       <h:commandButton id="continueButton" value="Continue" class="button" action="#{userSetting.continueNextPage}"/>
                       <s:pprPanelGroup id="pprPanelall" align="center" partialTriggers="applyButton">
                      
                       </s:pprPanelGroup>
                       <!-- outputText value="userSetting.selectedInfo}" -->
                      
                       </h:form>
                      </f:view>
                      
                       </ui:define>
                       </ui:composition>
                      </body>
                      
                      </html>
                      
                      
                      


                      • 9. Re: can I join a session with a conversation?
                        Pete Muir Master

                        And the exception? The WHOLE stack trace

                        • 10. Re: can I join a session with a conversation?
                          Mohammad Norouzi Novice

                           

                          "petemuir" wrote:
                          And the exception? The WHOLE stack trace


                          no exception I can see in tomcat console, but the first page will be displayed and the message

                          "The conversation ended, timed out or was processing another request"

                          will be displayed at that page. I expect to go back to another page but it returns to the first page of the application which I set if no conversation go to it.