Последняя строка повторяется в таблице DisplayTag

Я получаю все строки в таблице displaytag одинаковые значения, т. Е. Он отображает одинаковые значения для всех строк (т. Е. Значения последней строки)

Ниже приведен фрагмент класса Action, в котором я устанавливаю значения в formbean.

public class FormIdSearch extends Action {

    ResourceBundle rsBundle = ResourceBundle.getBundle("com.mindcraft.resources.ApplicationResource");
    Collection formbeanCol = new ArrayList();

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Collection a = new ArrayList();
        FormBean formbean = (FormBean)form;
        ActionForward forward = new ActionForward();
        ActionMessages message = new ActionMessages();
        CMBConnection connection=new CMBConnection();
        HRMSUtill hrms = new HRMSUtill();
        IngUtill ing = new IngUtill();
        AppUtill au = new AppUtill();
        try{


            String polNo=formbean.getPolicyNo();
            String appN=(String)request.getAttribute("appno");
            System.out.println("Application No.1" + appN);
            String applnNo=formbean.getAppno();
            System.out.println("Application No.2" + applnNo);
            String appNo=(String)request.getParameter("appno");
            System.out.println("Application No.3" + appNo);
            HashMap<String, String> inpMap = new HashMap<String, String>();

            CMBSearchResults srchResults = null;
            CMBItem item = null;

            inpMap.put(rsBundle.getString("CM_INDEXCLASS_ADVISORSLICENSING"), rsBundle.getString("CM_INDEXCLASS_ADVISORSLICENSING"));
            //inpMap.put(rsBundle.getString("CM_INDEXCLASS_ADVISORSLICENSING"), rsBundle.getString("CM_INDEXCLASS_ADVISORSLICENSING"));
            inpMap.put(rsBundle.getString("CM_COMMON_ADVISORCODE"), "AA5555");
            inpMap.put(rsBundle.getString("CM_COLNAME_ADVISORCODE"), rsBundle.getString("CM_COLNAME_ADVISORCODE"));
            inpMap.put(rsBundle.getString("CM_COMMON_APPNUMBER"), appNo);
            inpMap.put(rsBundle.getString("CM_COLNAME_APPNUMBER"), rsBundle.getString("CM_COLNAME_APPNUMBER"));

            String winId=(String)request.getSession().getAttribute("windowsId");
            String empId = au.getEmpCodeOnWinId(winId);

            System.out.println("winId===="+winId);
            String ingBrCode="";

            if(hrmsBrCode1.equalsIgnoreCase(ingBrCode1))
            {

                ServletContext servletcontext = request.getSession().getServletContext();
                String cmbicmsrvsPath = servletcontext.getRealPath("WEB-INF/cmbicmsrvs.ini");
                System.out.println("cmbicmsrvsPath "+cmbicmsrvsPath);

                String icmsrvfilePath=servletcontext.getRealPath("WEB-INF/cmbicmsrvs.ini");
                String icmmenvfilePath=servletcontext.getRealPath("WEB-INF/cmbicmenv.ini");

                connection = new CMBConnection();
                //CMConnectionPool cmConnect = new CMConnectionPool();
                CMSearchDocuments searchDoc = new CMSearchDocuments();


                CMConnectionPool.setIcmenvfile(icmmenvfilePath);
                CMConnectionPool.setIcmsrvfile(icmsrvfilePath);
                //System.out.println("HHHEYEEEYYEYE TRUE.........3");
                connection=CMConnectionPool.getConnection();


                srchResults=searchDoc.searchForDocumentsInCM(connection, inpMap);

                Integer searchCount=srchResults.getCount();

                System.out.println("searchCount "+searchCount);
                LoggerUtil.logger.debug("searchCount "+searchCount);
                HttpSession session = request.getSession(false);
                session.setAttribute("searchCount",searchCount.toString());
                for (int i = 0; i < searchCount; i++) 
                   {
                    item = srchResults.getItem(i);

                    a=getDocumentMetaData(item,formbean);
                      String pid=item.getPidString();
                      request.setAttribute("pid", pid);
                      formbean.setPid(pid);

                   }
                request.setAttribute("formbeanCol", a);
                Object ia[] = a.toArray(); 
                int sum = 0; 
                // sum the array 
                for(int i=0; i<ia.length; i++) {
                sum += ((Integer) ia[i]).intValue(); 
                System.out.println("Sum is: " + sum); 
                } 

                if(searchCount>0){
                    //for (int i = 0; i < srchResults.getCount(); i++){
                    item = srchResults.getItem(searchCount-1);
                    //getDocumentMetaData(item);

                    String pid = item.getPidString();
                    System.out.println("pid "+pid);
                    request.setAttribute("pid", pid);

                    forward=mapping.findForward("success");

                }
                else
                {   
                    forward=mapping.findForward("failure");
                    message.add("ErrorOccurred", new ActionMessage("Invalid.SearchResult"));
                }
                System.out.println("Search Done");
                LoggerUtil.logger.debug("Search Done");
            }
            else
            {

                System.out.println("No Record Found");
                LoggerUtil.logger.debug("No Record Found");

                forward=mapping.findForward("failure");
                message.add("ErrorOccurred", new ActionMessage("Invalid.SearchResult"));
            }
            saveMessages(request, message);
        }
        catch(Exception e){
            forward=mapping.findForward("failure");
            LoggerUtil.logger.debug("Exception in FormIdSearch ",e);
            e.printStackTrace();
        }
        finally{
            try{
                if(connection!=null){
                    CMConnectionPool.freeConnection(connection);
                }
            }
            catch(Exception e)
            {
                forward=mapping.findForward("failure");
                LoggerUtil.logger.debug("Exception in FormIdSearch in finally block Closing CM Connection",e);
            }
        }
        return forward;
    }
     public Collection getDocumentMetaData(CMBItem item,FormBean formbean)
     throws CMBException, Exception 
{

     // Get document metadata attributes
        String FormID = item.getAttrValue(0);
        System.out.println(item.getAttrValue(0));
        System.out.println(item.getAttrValue(1));
        System.out.println(item.getAttrValue(2));
        System.out.println(item.getAttrValue(3));
        System.out.println(item.getAttrValue(4));
        formbean.setFormID(FormID);
        String MainDocument=item.getAttrValue(1);
        formbean.setMainDocument(MainDocument);
        String SubDocument=item.getAttrValue(2);
        formbean.setSubDocument(SubDocument);
        formbean.setAppNumber(item.getAttrValue(3));
        formbean.setBranchCode(item.getAttrValue(4));
        formbean.setAdvisor_NAME(item.getAttrValue(5));
        formbean.setAdvisor_Code(item.getAttrValue(6));


         formbeanCol.add(formbean);
         System.out.println("formbeanCol.size() "+formbeanCol.size());


  return formbeanCol;
}
}  

JSP

<display:table name="formbeanCol" export="false" pagesize="20" sort="list" id="data" requestURI="" class="tablelist">

        <display:column title="advisor_Code" sortable="true" property="advisor_Code"></display:column>
        <display:column title="formID" sortable="true" property="formID"></display:column>
        <display:column title="mainDocument" sortable="true" property="mainDocument"></display:column>
        <display:column title="SubDocument" sortable="true" property="subDocument"></display:column>
        <display:column title="AppNumber" sortable="true" property="appNumber"></display:column>
        <display:column title="branchCode" sortable="true" property="branchCode"></display:column>
        <display:column title="advisor_NAME" sortable="true" property="advisor_NAME"></display:column>

</display:table>

ниже таблицы я получаю в качестве вывода

1 ответ

Решение

Проблема заключается в том, что вы используете единственный экземпляр FormBean (тот, который передается в Action через Struts) в getDocumentMetaData. Таким образом, ваша коллекция (formbeanCol) заканчивается тем, что каждая запись указывает на один и тот же экземпляр FormBean. Таким образом, в вашей последней итерации вы будете устанавливать значения для этого FormBean в последнюю строку данных, и все записи указывают на это.

Я бы посоветовал не использовать FormBean для этого (вместо этого использовать простой компонент) и каждый раз создавать новый экземпляр в getDocumentMetaData. Если вы хотите продолжать использовать FormBean, то просто исправьте getDocumentMetaData следующим образом:

public Collection getDocumentMetaData(CMBItem item,FormBean formbean)
throws CMBException, Exception 
{
    FormBean bean = new FormBean();

    // Get document metadata attributes
    String FormID = item.getAttrValue(0);
    bean.setFormID(FormID);

    // etc

    formbeanCol.add(bean);
    return formbeanCol;
}

Эта проблема подчеркивает опасность использования "глобальных" переменных (в данном случае formbean и formbeanCol).

К вашему сведению, вы должны избегать переменных экземпляра в действиях, так как действия в Struts 1.x имеют глобальную область действия, то есть один экземпляр будет совместно использоваться различными запросами. Вероятно, ваш formbeanCol будет становиться все больше и больше, и у вас могут возникнуть проблемы с параллелизмом. Просто объявите formbeanCol как локальную переменную в методе execute.

Другие вопросы по тегам