Avatar billede zamiel Nybegynder
19. oktober 2007 - 17:33 Der er 1 løsning

Problem med grids og databinding i BEA

Jeg sidder med eksemplet fra BEA Weblogics samples i databinding men får et exception på trods af at jeg tester deres kode.

Jeg får en numberformat exception som skyldes at jeg får null tilbage fra et metodekald som skal laves om til en Integer.

Det der sker som jeg kan se det er at productRows bliver fyldt op og lagt ud på test.jsp. Her trykker jeg så på edit hvilket forwarder mig til "updateProduct()" i adminController.jpf.

Når den kalder getCurrentRow() får jeg ovennævnte fejl.

helt specifikt når den kommer hertil:

Integer pk0 = new Integer(SortFilterService.decodeUniqueIdentifier(getRequest(), getGridName(), columnName));

Jeg kan se at "SortFilterService.decodeUniqueIdentifier" returnere "null" i stedet for et id for produktet i den row som man trykkede på i jsp siden.

Mit spørgsmål er så hvorfor får jeg så et null retur?

<netui-data:anchorColumn action="updateItems" addRowId="true" title="Edit"/>

addRowId="true" er sat hvilket efter min forståelse skulle gøre at en unik id for rækken blev sendt videre med til controlleren som denne bruger sammen med gridName og columnName til at få id for produktet retur.



Koden ser ud som følger:

adminController.jpf (servlet der styrer BEA's pageflow)
test.jsp (frontend)

adminController.jpf
-----------------

/**
    * @common:control
    */
    private resources.database.database projectDB;
    public transient RowSet productRows;
    public transient SortFilterService sortFilterService;
    private transient String gridName = "adminGrid";
    private transient RowSet lastRowFetched;

/**
    * @jpf:action
    * @jpf:forward name="success" path="test.jsp"
    */
    protected Forward show_test()
    {
        sortFilterService = SortFilterService.getInstance(getRequest());
        productRows = this.projectDB.product_SelectAllAdmin(getSortFilterService().getDatabaseFilter(getGridName()));
        return new Forward( "success" );
    }

/**
    * @jpf:action
    * @jpf:forward name="update" path="products_update.jsp"
    */
    protected Forward updateProduct(productForm form) throws Exception
    {

        lastRowFetched = getCurrentRow();
        form.applyValuesToForm(lastRowFetched);

        return new Forward("update",form);
    }

public String getGridName()
    {
        return gridName;
    }
   
    private RowSet getCurrentRow()
    {
        String columnName = null;
        try
        {
           
           
            columnName = "id";

            Integer pk0 = new Integer(SortFilterService.decodeUniqueIdentifier(getRequest(), getGridName(), columnName));
            lastRowFetched = this.projectDB.product_selectProductById(new Integer(22));

            int rowCount = (( WLCachedRowSet ) lastRowFetched ).size();
            if(rowCount == 1)
                return lastRowFetched;
            else throw new IllegalStateException("The RowSet for the primary key is not valid");
        }
        catch(Exception e)
        {
            RowIdentifierParseException ripe =
                new RowIdentifierParseException
                        ("An exception occurred parsing the row identifier " + columnName + " for the grid named " + getGridName() + " caused by " + e.toString(), e);
            throw ripe;
        }
    }
   
    protected RowSet getLastRowFetched()
        throws Exception
    {
        String columnName = null;
        if(lastRowFetched != null)
        {
            columnName = "id";
            Integer pk0 = new Integer(SortFilterService.decodeUniqueIdentifier(getRequest(), getGridName(), columnName));

            lastRowFetched.absolute(1);

            if( pk0.equals(lastRowFetched.getObject("id")))
            {
              return lastRowFetched;
            }
            else
            {
              return getCurrentRow();
            }
        }
        else
        {
            return getCurrentRow();
        }
    }
   
    public SortFilterService getSortFilterService()
    {
        return sortFilterService;
    }




test.jsp
---------------

<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
<%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
<%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%>
<netui:html>
    <head>
        <title>
            Web Application Page
        </title>
    </head>
    <body>
        <script language="javascript" src='<%=request.getContextPath() +
        "/resources/grid/_grid.js"%>' type="text/javascript"></script>
        <netui-data:grid dataSource="{pageFlow.productRows}" name="{pageFlow.gridName}">
            <netui-data:gridStyle styleClassPrefix="gridStyle"/>
            <netui-data:pager renderInFooter="true" action="pageAction"></netui-data:pager>
            <netui-data:columns filterAction="show_test" sortAction="show_test">
                <netui-data:imageColumn src="../../projectWeb/resources/images/{container.item.link}" title="image"></netui-data:imageColumn>
                <netui-data:anchorColumn title="Edit"  addRowId="true" action="updateProduct"></netui-data:anchorColumn>
                <netui-data:basicColumn title="id" name="id" sortable="true" filterable="true"></netui-data:basicColumn>
                <netui-data:basicColumn title="Code" name="product_code"></netui-data:basicColumn>
                <netui-data:basicColumn title="Name" name="product_name"></netui-data:basicColumn>
                <netui-data:basicColumn title="Price" name="price"></netui-data:basicColumn>
                <netui-data:basicColumn title="max" name="max"></netui-data:basicColumn>
               
                <netui-data:anchorColumn title="Up"  addRowId="true" action="increaseSortValue.do"></netui-data:anchorColumn>
                <netui-data:anchorColumn title="Down"  addRowId="true" action="decreaseSortValue.do"></netui-data:anchorColumn>
               
            </netui-data:columns>
        </netui-data:grid>
    </body>
</netui:html>
Avatar billede zamiel Nybegynder
08. november 2007 - 10:19 #1
lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester