「java」カテゴリーアーカイブ

java プロパティファイルを読み込むクラスを自作したい場合の簡単なサンプル

ResourceBundleを使用してプロパティファイルを読み込むサンプル。
複雑なことはしておらず、プロパティファイルにしか対応できない。
■プロパティファイル
errors.invalid={0}が不正です。
errors.maxlength={0}の長さが最大値({1})を超えています。
errors.minlength={0}の長さが最小値({1})未満です。

のようなkey=valueでメッセージなどを定義したファイルのこと
■以下サンプル
【TestBatch1.java】
package batch;

import java.util.MissingResourceException;

import common.MessageIdEnum;

import buhin.MessageHolder;

public class TestBatch1 {
 
 
 private static MessageHolder messageHolder = null;

 /**
  * @param args
  */
 public static void main(String[] args) {
  
  try {
   
   String path = args[0];
   
   messageHolder = new MessageHolder(path);
   
   messageHolder.printResourceBundle();
   
   System.out.println(“★————★————★”);
   System.out.println(messageHolder.getMessage(MessageIdEnum.ERRORS_DATEPASSED));

   System.out.println(“★————★————★”);
   System.out.println(messageHolder.getMessage(
     MessageIdEnum.TEST_ERR_MSG,
     MessageIdEnum.TEST_MSG4,
     MessageIdEnum.TEST_MSG6));
   
  } catch (MissingResourceException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }

  
 }

 
 
 
 
}

 

 

【MessageHolder.java】

このクラスがファイルを読み込み保持する
package buhin;

import java.util.Enumeration;
import java.util.ResourceBundle;

import common.MessageIdEnum;

public class MessageHolder {
 
 /**
  * リソース保存用クラス
  */
 private ResourceBundle rb = null;
 
 /**
  * コンストラクタ
  * プロパティファイルから読み込む
  * @param filePath
  */
 public MessageHolder(String filePath) {
  this.rb = ResourceBundle.getBundle(filePath);
 }
 
 /**
  * メッセージを返す
  * @param messageId
  * @return String メッセージ単発
  */
 public String getMessage(MessageIdEnum messageId) {
  return this.rb.getString(messageId.toString());
 }
 
 
 
 /**
  * application_ja.porpetiesからメッセージを取得する
  * @param messageId メッセージのキー
  * @param messageArgs メッセージに置換文字列が有る場合に置換するメッセージのキー
  * @return
  */
 public String getMessage(
   MessageIdEnum messageId,
   MessageIdEnum … messageArgs) {
  
   String subject = this.rb.getString(messageId.toString());

   if (messageArgs == null) {
   return subject;
  }
  
   /**
    * 引数の数分置き換える
    */
   for(int i = 0; i < messageArgs.length; i ++) {
    
    String arg = this.rb.getString(messageArgs[i].toString());

    subject = replaceString(“\\{” + String.valueOf(i) + “\\}”, arg, subject);
    
   }
   
  return subject;
  
 }
 
 /**
  * 文字列の置換をする <br />
  *
  * @param search
  *            置換対象の文字
  * @param replace
  *            置換後の文字
  * @param subject
  *            対象の文字列
  * @return 置換後の文字列
  */
 public String replaceString(String search, String replace,
   String subject) {
  return subject.replaceAll(search, replace);
 }
 
 /**
  * テスト用のメソッド
  */
 public void printResourceBundle() {
  
  for (Enumeration<String> e = rb.getKeys(); e.hasMoreElements();) {
   String key = (String) e.nextElement();
   String val = rb.getString(key);
   System.out.println(key + “=” + val);
  }

  System.out.println(“★————★————★”);

 }
 

}
【MessageIdEnum.java】
package common;

public enum MessageIdEnum {

 TEST_MSG4(“test.msg4”),
 TEST_MSG5(“test.msg5”),
 TEST_MSG6(“test.msg6”),
 TEST_ERR_MSG(“test.message”);

 /**
  * コンストラクタに指定した文字列を保持するキー
  */
 private String id;

 /**
  * コンストラクタ
  *
  * @param k
  *            列挙を保持するキー
  */
 private MessageIdEnum(String id) {
  this.id = id;
 }

 /**
  * 文字列表現を返す
  *
  * @return 文字列表現
  */

 public String toString() {
  return this.id;
 }
 
}

Seasar2 S2JDBC プライマリーキー以外でのDELETE

流れるようなインターフェイスでは、プライマリーキー以外を指定して

削除等行なえないようなので、SQLファイルを用いる。メソッドは以下

updateBySqlFile。

(例)

private static final String DELETE_SQL_FILE = “sql/delete.sql”;

Entityに条件をセットして、引数にセット。

 jdbcManager.updateBySqlFile(DELETE_SQL_FILE, entity).execute();

java map の for each

javadocに以下のようにあります。

・public static interface Map.Entry マップのエントリ (キーと値のペア) です

Map.entrySet メソッドは、このクラスに属する要素を持つマップのコレクションビューを返します

 Map<String, Object> map = new LinkesHashMap<String, Object>();

map.put(“key1”, “value1”);

map.put(“key2”, “value2″);

以下for each

for(Map.Entry<String, Object> e : map.entrySet()) {
  logger.debug(e.getKey() + ” : ” + e.getValue());
}

key1:value1

key2:value2

のように表示されます。

よく出来てるなあ。
  

java seasar2 jsp EL 式 Mapのデータ表示 

seaser2使用している場合です。
//フォーム
public class TestForm {

 public Map<String, String> testMap = null;

}

//アクションでのFormの定義

 @ActionForm
 @Resource
 public TestForm testForm = null;
//アクションでMap詰める
Map<String, String> testMap = new LinkedHashMap<String, String>();
for(int i = 0; i <= 23; i++) {
 testMap.put(String.valueOf(i), String.valueOf(i*10));
}
testForm.testMap = testMap; 
//jsp
<c:forEach var=”testMap”  items=”${testForm.testMap}”>
 <bean:define id=”key”  name=”testMap” property=”key” ></bean:define>
 <bean:define id=”value”  name=”testMap” property=”value” ></bean:define>
 <c:out value=”${f:h(key)}”></c:out>
 <c:out value=”${f:h(value)}”></c:out>
</c:forEach>

java eclipse 行番号属性がみつからないため ブレークポイントを・・・

eclipse3.4でデバック実行時に、以下のようなダイアログがでた。

「行番号属性がみつからないため ブレークポイントを~理由:欠落した行番号情報」

デバックは出来るので特に問題ないように見えるけど、毎回上がってくるので、邪魔だから消した。

対応は以下で出来た。原因はわからない。

ウインドウ>>設定>>java>>デバッグ>>

「行番号属性が見つからないためにブレークポイントをインストールできないときに警告」のチェックを外す

何が原因なんだろう?

Java Seasar2 Jsp EL式 c:forEach

Java Jsp EL式 <c:forEach>
jsp中でEL式を用いてループをするには<c:forEach>を使用します。

<table>
<c:forEach begin=”1″ end=”14″ step=”1″ varStatus=”row”>
 <tr>
  <c:forEach begin=”1″ end=”7″ step=”1″ varStatus=”col”>
   <td>
   <%– ここに書く–%>
   <%– index:<c:out value=”${row.index} – ${col.index}”/> –%>
   </td>
   <%– td:終了–%>
  </c:forEach>
 </tr>
</c:forEach>
</table>

7×14のテーブルが表示されます。

Java Seasar2 Jsp EL式

jsp中でEL式を用いて条件判断をするには<c:choose></c:when>を使用します。

値を格納
<c:set var=”youbi” value=”日”></c:set>

条件判断
<c:choose>
 <c:when test=”${youbi eq ‘日’}”><c:set var=”toEn” value=”Sun” /></c:when>
 <c:when test=”${youbi eq ‘月’}”><c:set var=”toEn” value=”Mon” /></c:when>
 <c:when test=”${youbi eq ‘火’}”><c:set var=”toEn” value=”Tue” /></c:when>
 <c:when test=”${youbi eq ‘水’}”><c:set var=”toEn” value=”Wed” /></c:when>
 <c:when test=”${youbi eq ‘木’}”><c:set var=”toEn” value=”Thu” /></c:when>
 <c:when test=”${youbi eq ‘金’}”><c:set var=”toEn” value=”Fri” /></c:when>
 <c:when test=”${youbi eq ‘土’}”><c:set var=”toEn” value=”Sat” /></c:when>
 <c:otherwise><c:set var=”toEn” value=”null” /></c:otherwise>
</c:choose>

表示
<c:out value=”${toEn}”></c:out>

Sunと表示されます。