0

以下のコードを使用してメール本文にhtmlテーブルを作成しました

            st = con.createStatement();
            rs = st.executeQuery("SELECT nvl(tt.ACTIVITY_NAME,'') as ACTIVITY_NAME, "
                    + " nvl(tt.TL_NAME,'') TL_NAME, "
                    + " nvl(tt.UW_NAME,'') UW_NAME, "
                    + " nvl(tt.TAT_1,'') TAT_1,"
                    + " nvl(tt.TAT_2,'') TAT_2, "
                    + " nvl(tt.TAT_3,'') TAT_3, "
                    + " nvl(tt.TAT_4,'') TAT_4, "
                    + " nvl(tt.TAT_4_PLUS ,'') TAT_4_PLUS, "
                    + " nvl(tt.g_total ,'') AS GRAND_TOTAL "
                    + " FROM uw_activity_tl_uw_tat tt "
                    + " WHERE tt.ACTIVITY_NAME = 'First UW' "
                    + " ORDER BY tt.TL_NAME,tt.UW_NAME");
            StringBuffer sb = new StringBuffer();

            ResultSetMetaData rsmd = rs.getMetaData();
            int numColumns = rsmd.getColumnCount();
            for (int i = 1; i < numColumns + 1; i++) {
                String columnName = rsmd.getColumnName(i);
                sb.append("<th bgcolor=#fcbe07>" + columnName + "</th>");
            }
            ArrayList<String> a = new ArrayList<String>();

            while (rs.next()) {

                a.add(rs.getString(3));

                if (rs.getRow() % 2 == 0) {
                    sb.append("<tr bgcolor=#fcf6cf>");
                    for (int i = 1; i < numColumns + 1; i++) {
                        if (rs.getString(i) == null) {
                            if(i==3)
                            {
                                sb.append("<td bgcolor=#fcbe07><b>"+ " "+ "</b></td>");

                            }


                        } else {

                            if (i == 6 || i == 7 || i == 8)
                                sb.append("<td><FONT COLOR=#ff0000>"
                                        + rs.getString(i) + "</FONT></td>");
                            else if(i==3 && (rs.getString(3).equalsIgnoreCase("") || rs.getString(3)==null)){
                                sb.append("<td bgcolor=#fcbe07><b>"+ rs.getString(i) + "</b></td>");
                            }else{
                                sb.append("<td>" + rs.getString(i) + "</td>");
                            }
                        }
                    }

                    sb.append("</tr>");
                } else {

                    sb.append("<tr>");
                    for (int i = 1; i < numColumns + 1; i++) {
                        if (rs.getString(i) == null) {
                            if(i==3)
                            {
                                sb.append("<td bgcolor=#fcbe07><b>"+ " " + "</b></td>");

                            }

                        } else {
                            if (i == 6 || i == 7 || i == 8)
                                sb.append("<td><FONT COLOR=#ff0000>"
                                        + rs.getString(i) + "</FONT></td>");
                            else if(i==3 && (rs.getString(3).equalsIgnoreCase("") || rs.getString(3)==null)){
                                sb.append("<td bgcolor=#fcbe07><b>"+ rs.getString(i) + "</b></td>");
                            }else{
                                sb.append("<td>" + rs.getString(i) + "</td>");
                            }
                        }
                    }

                    sb.append("</tr>");

                }

            }

            String html = "<html>" + message.getSubject()
                    + "</title></head><body><table border=\"1\">"
                    + sb.toString() + "</table></body></html>";
            message.setContent(html, "text/html");

画像では1つのセルのみが強調表示されており、空のセルがある行全体を強調表示したいと思います。ガイドしてください。私の質問は、セルが空の場合に行全体を強調表示する方法です。

4

3 に答える 3

2

簡単な答え:3番目の列のチェックを移動し、<tr>行を変更します。

正直なところ、あなたが持っているコードは少し混乱しています。個人的には、メンテナンスを非常に簡単にする次の変更を行います。

  1. bgcolorsなどをハードコーディングする代わりにクラスを使用するように切り替えます。
  2. 数値配列ではなく連想配列を返すようにシステムを設定します。これにより、後でコードを読むのがはるかに簡単になります。
  3. 返された値を保持するように中間変数を設定します。そこで計算と設定をすべて行います。次に、テーブル行全体を一度にダンプします。これにより、「機能」コードと「表示コード」が分離されます。

ただし、ピンチでは、次のようなものがあなたを動かします:

tmp = rs.getString(3);
if (tmp == null) {
  sb.append("<tr bgcolor=#ffffff>");
} else {
  sb.append("<tr bgcolor=#fcf6cf>");
}

ところで-生成したHTMLは無効です。

于 2012-09-07T05:43:46.883 に答える
1

頭のてっぺんの

boolean cellNull = false;
while(rs.next()){
    cellNull = false;
    cellNull = checkIfAnyFieldIsNull(rs);
    if(cellNull)
        sb.append("<tr bgcolor=\"#WTH\">");
    else
        sb.append("<tr>");

    //create rest of the row content here
}


private boolean checkIfAnyFieldIsNull(ResultSet rs){
    for(i=0 etc..){
        if(rs.getString(i) == null)
            return true;
    }
    return false;
}
于 2012-09-07T05:48:32.573 に答える
0

それを行う1つの方法は次のとおりです。

  • POJO表示するすべての列を含むクラスを作成します。また、ブール変数、たとえばを持っています。列のいずれかがnullの場合は、trueに設定します
  • ArrayListを作成し、結果セットを反復処理しながらクラスの各インスタンスを追加します
  • 次に、このArrayListを使用して出力をレンダリングします。すでにブール変数が利用可能であるため、この値を使用して行の背景色を設定できます。
于 2012-09-07T05:48:30.250 に答える