StrutsでFormに値を突っ込むときのあれこれ
最近結構使ったのでメモ。
以下のコードたちは基本的に、記憶頼り、脳内構築で
動作確認してないので注意。
(1)基本
<input type='text' name="TestForm" property="test">
なんて書くと、submitしたときに
public class TestForm extends Actionform { String test = null; public void setTest(String test) { this.test = test; } public String getTest() { return test; } }
ってあるFormのtestに値を突っ込めるのはStrutsさんの基本。
なんとなく、id、name、propertyの順で書くと分かりやすい気がする。
String testId = TestForm.test;
見たいな感じで。
(2)プロパティにクラス
そして、こんな風に書くと
<input type='text' name="TestForm.TestBean" property="test">
public class TestForm extends Actionform { TestBean testBean = new TestBean(); public void setTestBean(TestBean testBean) { this.testBean = testBean; } public String getTestBean() { return testBean; } } public class TestBean { String test = null; public void setTest(String test) { this.test = test; } public String getTest() { return test; } }
こんな感じで持ってる、TestBeanの中のtestに値を突っ込める。
new TestBean();
newはしておかないと、何とか例外が出る。
(3)プロパティに配列とかリスト
それからそれから
<input type='text' name="TestForm[0]" property="test"> <input type='text' name="TestForm[1]" property="test">
こんな風にも書くことができて
public class TestForm extends Actionform { List<String> testList = new ArrayList<String>(); public void setTestList(List<String> testList) { this.testList = testList; } public void getTestList() { return testList; } public String getTest(int index) { return testList.get(i); } }
リスト(配列でも良いはず)の中に値を突っ込める。
property="XXXXX"
と
getXXXXX
のXXXXXが対応してるから、好きな名前をつけられたはず。
あと、実際にはgetterであうとおぶばうんずを起こさないような実装をする必要がある
こんな感じかしら?
public String getTest(int index) { for (int i = testList.size(); i < index; i++) { testList.add(new String()); } return testList.get(index); }
(4)プロパティにクラスのリスト
最後に(2)と(3)の組み合わせ。
<input type='text' name="TestForm[0].TestBean" property="test"> <input type='text' name="TestForm[1].TestBean" property="test">
public class TestForm extends Actionform { List<TestBean> testBeanList = new ArrayList<TestBean>(); public void setTestBeanList(List<TestBean> testBeanList) { this.testBeanList = testBeanList; } public String getTestBean(int index) { return testBeanList.get(i); } } public class TestBean { //(略) }
iterateタグ使ってたり
動的に要素が増えるようなjavascriptを組んでたりする場合にとても便利
HttpClient4でmixiにつないでみた
こことJavaのHttpClient 4 を触ってみた。
ここのHttpClientでログイン認証を試す(POST)
まるパクリだけど、あまりにもさっくり繋がってびっくりした。
HttpClient3でaddParameterでできてた、パラメータの設定が
一度NameValuePairのリストに詰め込んでから、setEntityでするようになった?
HttpClientとか3とか4とか以前に、触ったことがないからわからんけれど。
HTTPSでつなぐのに、特別な設定はいらない模様?
これはHttpClient3の公式でも
「HTTPS通信は、普通のHTTP通信と同じくらいシンプルじゃなきゃいけない」
みたいな事書いてあるし、そうなんだろう。4でめんどくさくするとは思えないしw
それから
// 取得したレスポンスのストリーム(?)をクローズ
response.getEntity().getContent().close();
これをやらないと
HttpClient で例外
こういうことになる。
とりあえず、これで、自分のmixiのトップページが見られたので満足。
以下、ほぼまるパクリなソースコード。
public class HttpClientTest { public static void main(String[] args) { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("https://mixi.jp/login.pl"); HttpPost httpGet = new HttpPost("http://mixi.jp/home.pl"); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("email", "xxxxxxxx@hotmail.co.jp")); params.add(new BasicNameValuePair("password", "xxxxxxxxxxxxx")); params.add(new BasicNameValuePair("next_url", "/home.pl")); try { httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); System.out.println("executing request " + httpPost.getURI()); System.out.println("-------------------------------------"); HttpResponse response = httpClient.execute(httpPost); // レスポンスヘッダーの取得 int statusCode = response.getStatusLine().getStatusCode(); System.out.println(statusCode); System.out.println("-------------------------------------"); // 取得したレスポンスのストリーム(?)をクローズ response.getEntity().getContent().close(); if (statusCode == 200) { response = httpClient.execute(httpGet); statusCode = response.getStatusLine().getStatusCode(); System.out.println(statusCode); Header[] headers = response.getAllHeaders(); for (Header header : headers) { System.out.println(header.getName() + ": " + header.getValue()); } System.out.print(System.getProperty("line.separator")); // レスポンスボディの取得 HttpEntity httpEntity = response.getEntity(); System.out.println(EntityUtils.toString(httpEntity)); } } catch (Exception e) { e.printStackTrace(); } finally { // HTTP接続を閉じる(shutdownを実行するとセッションが切れます) httpClient.getConnectionManager().shutdown(); } } }
俺の知ってるJAVAの配色じゃない・・・
とりあえず備忘録
余裕のあるときに、色々書いていこうと思う。