You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by John <jo...@jak.com> on 2006/03/08 20:11:39 UTC

RE: SOLVED - Tobago sheet using jdbc ResultSet example request

The problem was indeed that the rows were in the sheet, but the layout
prevented them from being seen.
I changed the facet on the panel:
FROM

<f:facet name="layout">
        <t:gridLayout rows="fixed"/>
</f:facet>

TO

<f:facet name="layout">
        <t:gridLayout rows="1*"/>
</f:facet>


Now it works fine!
Thanks to all who helped.

John

-----Original Message-----
From: Bernd Bohmann [mailto:bernd.bohmann@atanion.com] 
Sent: Monday, March 06, 2006 2:39 PM
To: MyFaces Discussion
Subject: Re: Tobago sheet using jdbc ResultSet example request

Have you played with my example?

I can't see the problem maybe i have to setup a own example with your
content but this takes some time.

Good Night

Bernd

John schrieb:
> Yes. I verified within the GetRslt() that there are rows being
returned.
> I did a System.out.println(rslt.getRow())
> 
> John
> 
> -----Original Message-----
> From: Bernd Bohmann [mailto:bernd.bohmann@atanion.com]
> Sent: Monday, March 06, 2006 12:01 PM
> To: MyFaces Discussion
> Subject: Re: Tobago sheet using jdbc ResultSet example request
> 
> Are you sure that getRslt() returns not null?
> And can you check that the resultSet contains rows?
> 
> John schrieb:
> 
>>No change except no rows found is not reported.
>>
>>
>> package com.pop3gateway;
>>
>>import com.pop3gateway.MessageObject.*; import java.util.HashMap; 
>>import java.util.*; import java.io.Serializable; import java.io.*; 
>>import java.sql.*;
>>
>>/**
>> * <p>Title: Extensible Messaging Platform</p>
>> * <p>Description: Enterprise Anti-spam Filter</p>
>> * <p>Copyright: Copyright (c)1997-2004</p>
>> * <p>Company: J.A. Korsmeyer, Inc.</p>
>> * @author J.A. Korsmeyer, Inc.
>> * @version 5.5
>> */
>>
>>public class Quarantine extends DatabaseServer {
>>  //static final long serialVersionUID = -3537385394408850867L;
>>  //protected QuarantineRec QuarantineRec = null;
>>  protected boolean hit = false;
>>  protected boolean success = true;
>>
>>  File messageFile = null;
>>  File messageFile2 = null;
>>
>>  PreparedStatement stQuerySenderRecipient = null;  PreparedStatement 
>> stQuerySender = null;  PreparedStatement stQueryRecipient = null;  
>> PreparedStatement stQueryRecipientLike = null;  PreparedStatement 
>> stInsertRec = null;  PreparedStatement stDeleteRec = null;
>>
>>  String quarantine = System.getProperty("EMP.home") + 
>>File.separatorChar +
>>          "Data"
>>          + File.separatorChar + "RouterProcessorEngines" + 
>>File.separatorChar
>>          + "0" + File.separatorChar + "Quarantine";
>>
>>  String msgObjs = System.getProperty("EMP.home") + File.separatorChar
> 
> +
> 
>>          "Data"
>>          + File.separatorChar + "RouterProcessorEngines" + 
>>File.separatorChar
>>          + "0" + File.separatorChar + "MessageObjects";
>>
>>  public Quarantine() {
>>    this(System.getProperty("EMP.home") + File.separatorChar + "Db");
>>    
>>     System.out.println("we ran the beans constructor");
>>    //super();
>>  }
>>
>>  public Quarantine(String databaseDir) {
>>    super(databaseDir);
>>    System.out.println("We're ready to test if Quarantine tables 
>>exist");
>>    if(!quarantineTablesExist()) {
>>      //System.out.println("They don't so create");
>>      try {
>>        Statement createTableStatement =
> 
> dbConnection.createStatement();
> 
>>        System.err.println("create table statement");
>>        Statement createIE1Statement = dbConnection.createStatement();
>>        Statement createIE2Statement = dbConnection.createStatement();
>>        System.err.println("create table");
>>        createTableStatement.execute("CREATE CACHED TABLE 
>>quarantine(FILENAME CHAR(64), SENDER CHAR(128), RECIPIENT CHAR(128), 
>>SUBJECT CHAR(128), FILTEREDBY CHAR(24), MATCHTEXT CHAR(128), 
>>CONSTRAINT cQuarPRI PRIMARY KEY (FILENAME))");
>>        createIE1Statement.execute("CREATE INDEX IEQ1 ON 
>>quarantine(SENDER)");
>>        createIE2Statement.execute("CREATE INDEX IEQ2 ON 
>>quarantine(RECIPIENT)");
>>
>>      }
>>      catch (SQLException sqlCreateQuarantineE) {
>>        System.err.println("ERROR: unable to create table
> 
> quarantine");
> 
>>        sqlCreateQuarantineE.printStackTrace();
>>      }
>>    }
>>    // prepare statements for later use
>>    initQuarantine();
>>
>>  }
>>
>>private String test = "beginning value";
>>  private Object sheetState;
>>  private ResultSet rslt = null;
>>  boolean more = false;
>>  String returnSender = null;
>>  File dbDirPath = null;
>>  QuarantineRec quarantineRec = null;
>>
>>  public void initQuarantine() {
>>    dbDirPath = new File(System.getProperty("EMP.home") + 
>>File.separatorChar + "Db");
>>    //System.out.println("just entered init");
>>    quarantineRec = new QuarantineRec();
>>
>>    try {
>>      setDatabaseDir(dbDirPath.getCanonicalPath());
>>      dbConnect();
>>
>>          stQuerySenderRecipient = dbConnection.prepareStatement(
>>          "SELECT * FROM quarantine WHERE sender=? AND recipient=?",
>>      ResultSet.TYPE_SCROLL_INSENSITIVE,
>>              ResultSet.CONCUR_READ_ONLY);
>>
>>           //System.out.println("just prepared
> 
> stQuerySenderRecipient");
> 
>>      stQuerySender = dbConnection.prepareStatement(
>>      "SELECT * FROM quarantine WHERE sender=?",
>>          ResultSet.TYPE_SCROLL_INSENSITIVE,
>>              ResultSet.CONCUR_READ_ONLY);
>>           //System.out.println("just prepared stQuerySender");
>>      stQueryRecipient = dbConnection.prepareStatement(
>>      "SELECT * FROM quarantine WHERE recipient=?",
>>          ResultSet.TYPE_SCROLL_INSENSITIVE,
>>              ResultSet.CONCUR_READ_ONLY);
>>      stQueryRecipientLike = dbConnection.prepareStatement(
>>      "SELECT * FROM quarantine WHERE recipient LIKE ?",
>>          ResultSet.TYPE_SCROLL_INSENSITIVE,
>>              ResultSet.CONCUR_READ_ONLY);
>>          //System.out.println("just prepared stQueryRecipient");
>>      stInsertRec = dbConnection.prepareStatement("INSERT INTO 
>>quarantine VALUES(?,?,?,?,?,?)");
>>      stDeleteRec = dbConnection.prepareStatement("DELETE FROM 
>>quarantine WHERE filename = ?");
>>
>>      messagesList("johnk@jak.com");
>>      System.out.println("just called messagesList()");
>>
>>    } catch (SQLException stmtPrepE) {
>>      System.err.println("ERROR: Couldn't prepare statements");
>>    }
>>    catch ( IOException dbPathE ) {
>>    System.err.println("ERROR: Couldn't find path to DB directory");  
>> }
>>
>>
>>  }
>>  public boolean quarantined(String sender, String recipient) {
>>    hit = false;
>>    if( sender != null && recipient != null ) {
>>      try {
>>        stQuerySenderRecipient.setString(1,
>>deFocus(sender).toLowerCase());
>>        stQuerySenderRecipient.setString(2, recipient.toLowerCase());
>>        rslt = stQuerySenderRecipient.executeQuery();
>>        if (rslt != null && rslt.next()) {
>>          hit = true;
>>        }
>>
>>      }
>>      catch (SQLException queryE) {}
>>    }
>>    return hit;
>>  }
>>
>>  public boolean quarantined(SMTPMessageObject mo) {
>>   hit = false;
>>   if (mo.getSender() != null) {
>>     try {
>>       stQuerySender.setString(1,
>>deFocus(mo.getSender().toLowerCase()));
>>       //System.out.println("getSender= " + deFocus(mo.getSender()));
>>       //System.out.println("recipientsString= " + 
>>mo.getRecipientsAsString());
>>       rslt = stQuerySender.executeQuery();
>>
>>       if (rslt != null) more = rslt.next();
>>       while (more && rslt != null) {
>>         //System.out.println("recipient=" + rslt.getString(2));
>>         //System.out.println("recipString=" + 
>>mo.getRecipientsAsString());
>>         if
>>(mo.getRecipientsAsString().toLowerCase().indexOf(rslt.getString(2).
>>             toLowerCase()) > -1) {
>>           //System.out.println("matched");
>>           hit = true;
>>           break;
>>         }
>>         more = rslt.next();
>>       }
>>
>>     }
>>     catch (SQLException queryE) {}
>>   }
>>   return hit;
>> }
>>
>>  public void messagesList(String recipient) {
>>    if( recipient != null ) {
>>      try {
>>        stQueryRecipientLike.setString(1, "%" +
>>recipient.toLowerCase()
>>+ "%");
>>
>>        rslt = stQueryRecipientLike.executeQuery();
>>        System.out.println("result set=" + rslt);
>>        
>>        if(rslt.last()) {
>>
>>          System.out.println("Number of records: " + rslt.getRow());
>>        } else {
>>          System.out.println("No records returned");
>>
>>        }
>>
>>
>>
>>      } catch (SQLException queryE) { queryE.printStackTrace(); }
>>    }
>>
>>  }
>>
>>  boolean tryAgain = true;
>>  public QuarantineRec getNextRec() {
>>    tryAgain = true;
>>    try {
>>      if( rslt != null && rslt.next() ) {
>>
>>        while(tryAgain) {
>>          messageFile = new File(quarantine + File.separatorChar + 
>>rslt.getString("FILENAME"));
>>          if (messageFile.exists()) {
>>            //System.out.println("sender=" + rslt.getString(1));
>>            quarantineRec.filename = rslt.getString("FILENAME");
>>            quarantineRec.sender = rslt.getString("SENDER");
>>            quarantineRec.recipient =
>>truncate(rslt.getString("RECIPIENT"), 64);
>>            quarantineRec.subject =
>>truncate(rslt.getString("SUBJECT"),
>>64);
>>            quarantineRec.filteredby = rslt.getString("FILTEREDBY");
>>            quarantineRec.matchtext =
>>truncate(rslt.getString("MATCHTEXT"), 64);
>>            tryAgain = false;
>>          }
>>          else {
>>            deleteRec(rslt.getString("FILENAME")); // cleanup database
> 
> 
>>record for deleted message
>>            if(! rslt.next()) { break; }
>>          }
>>        }
>>      }
>>      else {
>>        return null;
>>      }
>>    }catch (SQLException getNextE) {}
>>    return quarantineRec;
>>  }
>>  public String displayMessage(String filename) {
>>    String messageText = null;
>>    String tempLine;
>>    int lineNum = 0;
>>
>>    try {
>>      BufferedReader bufMessageReader = new BufferedReader(new 
>>FileReader(quarantine + File.separatorChar + filename));
>>      while( (tempLine = bufMessageReader.readLine()) != null ) {
>>        //System.out.println("(" + tempLine + ")");
>>        messageText += tempLine + "\n";
>>        lineNum++;
>>        if(lineNum > 100) { break; }
>>
>>      }
>>      bufMessageReader.close();
>>
>>    }
>>    catch( Exception e) {
>>      e.printStackTrace();
>>    }
>>
>>    return messageText;
>>  }
>>  public boolean insertRec(String filename, String sender, String 
>>recipient, String subject, String filteredby, String matchtext) {
>>    success = false;
>>    if( sender != null && recipient != null ) {
>>      try {
>>        success = true;
>>        stInsertRec.setString(1, filename);
>>        stInsertRec.setString(2, deFocus(sender.toLowerCase()));
>>        stInsertRec.setString(3, recipient.toLowerCase());
>>        stInsertRec.setString(4, subject);
>>        stInsertRec.setString(5, filteredby);
>>        stInsertRec.setString(6, matchtext);
>>        stInsertRec.execute();
>>      }
>>      catch (SQLException insertE) {}
>>    }
>>    return success;
>>  }
>>  public boolean deleteRec(String filename) {
>>    try {
>>      success = true;
>>      stDeleteRec.setString(1, filename);
>>      stDeleteRec.execute();
>>      // Delete from Quarantine directory
>>
>>      messageFile = new File(quarantine + File.separatorChar + 
>>filename);
>>      if(messageFile.exists()) {
>>        messageFile.delete();
>>      }
>>
>>    } catch(SQLException deleteE) { success = false; }
>>    return success;
>>
>>  }
>>  public boolean deliver(String filename) {
>>    boolean success = true;
>>    try {
>>      stDeleteRec.setString(1, filename);
>>      stDeleteRec.execute();
>>
>>      messageFile = new File(quarantine + File.separatorChar + 
>>filename);
>>      messageFile2 = new File(msgObjs + File.separatorChar + 
>>filename);
>>
>>      messageFile.renameTo(messageFile2);
>>    } catch(SQLException deleteE) { success = false; }
>>    return success;
>>  }
>>  public boolean messageFileExists(String filename) {
>>    boolean exists = false;
>>    messageFile = new File(quarantine + File.separatorChar +
> 
> filename);
> 
>>    if(messageFile.exists()) { exists = true; }
>>    return exists;
>>  }
>>  protected boolean quarantineTablesExist() {
>>    boolean exists = true;
>>   // String[] types = {"TABLE"};
>>    try {
>>     Statement statement = dbConnection.createStatement();
>>     ResultSet rs = statement.executeQuery("SELECT * FROM
> 
> quarantine");
> 
>>      /*
>>      DatabaseMetaData metaData = dbConnection.getMetaData();
>>      ResultSet rs = metaData.getTables(null, null, "whitelist", // 
>>2nd null would be schemapattern
>>                                        null);
>>      if(rs.next()) {   //the table exists
>>        exists = true;
>>
>>      }
>>      */
>>      }catch (Exception e) { e.printStackTrace();  exists = false; }
>>    return exists;
>>
>>  }
>>
>>  public void quarantineDirectoryCleanup() {
>>    // Delete from database if not in Quarantine directory
>>    //
>>
>>  }
>>  public void close() {
>>        try {
>>            dbConnection.commit();
>>            dbConnection.close();
>>        } catch (SQLException sqlClose) {
>>            System.err.println("ERROR: closing connection into 
>>statistics database");
>>            sqlClose.printStackTrace();
>>        }
>>  }
>>  protected String deFocus(String str) {
>>    String returnToken = ""; // probably should be null but we need to
> 
> 
>>fix in full path (SMTPmsgObject + output portal
>>    StringTokenizer tokenizer = new StringTokenizer(str, "<>");
>>    if( tokenizer.hasMoreTokens()) {
>>      returnToken = tokenizer.nextToken();
>>    }
>>    return returnToken;
>>  }
>>
>>  public String truncate(String string, int maxChars) {
>>    String returnString = string;
>>    if(string != null && string.length() > maxChars) {
>>      returnString = string.substring(0, maxChars);
>>    }
>>    return returnString;
>>  }
>>
>>  public ResultSet getRslt() {
>>   
>>   System.out.println("just called getRslt()");
>>   return rslt;
>> }
>>  public void setRslt(ResultSet rslt) { this.rslt = rslt; }
>>
>>  //void getInitQuarantine() { initQuarantine(); }  //void 
>> setInitQuarantine() { initQuarantine(); }
>>
>>  public Object getSheetState() {
>>    return sheetState;
>>  }
>>
>>  public void setSheetState(Object sheetState) {
>>    this.sheetState = sheetState;
>>  }
>>
>>  public void setTest(String teststring) {
>>    this.test = teststring;
>>  System.out.println("just setTest to " + this.test);
>>  this.test = "this is what we hard setTest to"; } public String
>>getTest() { return this.test; } }
>>
>>-----Original Message-----
>>From: Bernd Bohmann [mailto:bernd.bohmann@atanion.com]
>>Sent: Monday, March 06, 2006 11:27 AM
>>To: MyFaces Discussion
>>Subject: Re: Tobago sheet using jdbc ResultSet example request
>>
>>Please remove the state attribute it should be a ref to a SheetState 
>>Instance.
>>Please remove showRowRage, showDirectLinks and directLinkCount 
>>attributes they make no sense for a dataModel for a resultSet because 
>>the dataModel returns rowCount -1 for a resultSet.
>>
>>Can you send me the ManagedBean code, please.
>>
>>Bernd
>>
>>John schrieb:
>>
>>
>>>That's what I thought - so I changed it to uppercase. Didn't affect 
>>>the results.
>>>
>>>createTableStatement.execute("CREATE CACHED TABLE quarantine(FILENAME

>>>CHAR(64), SENDER CHAR(128), RECIPIENT CHAR(128), SUBJECT CHAR(128), 
>>>FILTEREDBY CHAR(24), MATCHTEXT CHAR(128), CONSTRAINT cQuarPRI PRIMARY

>>>KEY (FILENAME))");
>>>
>>><t:sheet
>>>         value="#{quarantine.rslt}"
>>>         id="sheet"
>>>         columns="3*;1*;3*;3*;3*"
>>>         var="quarantineRec"
>>>         state="1"
>>>         showRowRange="left"
>>>         showPageRange="right"
>>>         showDirectLinks="center"
>>>         pagingLength="7"
>>>         directLinkCount="5">
>>>         <t:column label="From" id="name" sortable="true">
>>>           <t:out value="#{quarantineRec.SENDER}" />
>>>         </t:column>
>>>         <t:column label="To" id="number" sortable="false"
>>>align="center">
>>>           <t:out value="#{quarantineRec.RECIPIENT}" />
>>>         </t:column>
>>>         <t:column label="Subject" sortable="true">
>>>           <t:out value="#{quarantineRec.SUBJECT}" />
>>>         </t:column>
>>>         <t:column label="Matched" sortable="true">
>>>           <t:out value="#{quarantineRecr.MATCHTEXT}" />
>>>         </t:column>
>>>         <t:column label="Filtered" sortable="true" align="right">
>>>           <t:out value="#{quarantineRec.FILTEREDBY}" />
>>>         </t:column>
>>>       </t:sheet>
>>>
>>>-----Original Message-----
>>>From: Bernd Bohmann [mailto:bernd.bohmann@atanion.com]
>>>Sent: Monday, March 06, 2006 11:02 AM
>>>To: MyFaces Discussion
>>>Subject: Re: Tobago sheet using jdbc ResultSet example request
>>>
>>>John,
>>>
>>>please send the sheet jsp and the definition of the table.
>>>
>>>Maybe a case-sensitive problem.
>>>
>>>Bernd
>>>
>>>John schrieb:
>>>
>>>
>>>
>>>>Ok.
>>>>
>>>>My bean is retrieving 2 rows, but they are not being displayed.
>>>>
>>>>In the definition of the tobago sheet, the var definition: It's 
>>>>arbitrary, I'm assuming and doesn't map to any real variables in any

>>>>beans.
>>>>Ok. So assuming a var definition of:  QuarantineRec Then in the 
>>>>t:outs
>>>
>>>
>>>>if I'm using:  quarantineRec.SENDER  where SENDER is a database 
>>>>column
>>>
>>>
>>>>in the returned ResultSet.........
>>>>
>>>>Does Tobago automatically know that SENDER is a db column?
>>>>
>>>>No data showing in the Tobago sheet.
>>>>
>>>>John
>>>>
>>>>-----Original Message-----
>>>>From: Bernd Bohmann [mailto:bernd.bohmann@atanion.com]
>>>>Sent: Monday, March 06, 2006 1:28 AM
>>>>To: MyFaces Discussion
>>>>Subject: Re: Tobago sheet using jdbc ResultSet example request
>>>>
>>>>
>>>>John schrieb:
>>>>
>>>>
>>>>
>>>>
>>>>>Thank you very much for the example.
>>>>>The trick seems to be having a function called 'select' within the 
>>>>>backing bean, which tobago's sheet looks for to return data into 
>>>>>the
> 
> 
>>>>>resultSet which has been provided within the sheet's value.
>>>>>
>>>>>Yes?
>>>>
>>>>
>>>>No, the select method is for the detail page.
>>>>
>>>>The getSolarObjects() method is for the sheet.
>>>>
>>>>The other get methods are for the detail page.
>>>>
>>>>
>>>>Bernd
>>>>
>>>>
>>>
>>>
>>>--
>>>Dipl.-Ing. Bernd Bohmann - Atanion GmbH - Software Development 
>>>Bismarckstr. 13, 26122 Oldenburg, http://www.atanion.com
>>>phone: +49 441 4082312, mobile: +49 173 8839471, fax: +49 441 4082333
>>>
>>>
>>
>>
>>--
>>Dipl.-Ing. Bernd Bohmann - Atanion GmbH - Software Development 
>>Bismarckstr. 13, 26122 Oldenburg, http://www.atanion.com
>>phone: +49 441 4082312, mobile: +49 173 8839471, fax: +49 441 4082333
>>
>>
> 
> 
> --
> Dipl.-Ing. Bernd Bohmann - Atanion GmbH - Software Development 
> Bismarckstr. 13, 26122 Oldenburg, http://www.atanion.com
> phone: +49 441 4082312, mobile: +49 173 8839471, fax: +49 441 4082333
> 
> 

--
Dipl.-Ing. Bernd Bohmann - Atanion GmbH - Software Development
Bismarckstr. 13, 26122 Oldenburg, http://www.atanion.com
phone: +49 441 4082312, mobile: +49 173 8839471, fax: +49 441 4082333



Re: SOLVED - Tobago sheet using jdbc ResultSet example request

Posted by Volker Weber <us...@weber-oldenburg.de>.
Hi John,

layout 'fixed' means, on most non panel components, a, theme dependend,
fix defined pixel size. but not all components has this already defined.
seems like sheet havend, but what height/width should be default for sheet?

BTW if your box only contains a single component (the sheet in this
case) you can, and should, ommit the layout.


Regards,
  Volker

John wrote:
> The problem was indeed that the rows were in the sheet, but the layout
> prevented them from being seen.
> I changed the facet on the panel:
> FROM
> 
> <f:facet name="layout">
>         <t:gridLayout rows="fixed"/>
> </f:facet>
> 
> TO
> 
> <f:facet name="layout">
>         <t:gridLayout rows="1*"/>
> </f:facet>
> 
> 
> Now it works fine!
> Thanks to all who helped.
> 
> John
>