- - PR -
Teedaでの値の引渡しについて
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-05-18 16:58
入力画面で値を入力した後に、
確認ボタンを押し、確認画面に値を引渡した後、 確認画面の完了ボタンを押した場合、 次に表示するはずの完了画面が表示されず、 確認画面が再表示されてしまいます。 【理想の画面フロー】 入力画面→確認画面→完了画面 【現在の画面の動き】 入力画面→確認画面→確認画面 動きをみると、どうも確認画面の doアクションが呼べてないように思います。 この現象がどうしても解決できません。 適当なサンプルですいませんが、 各画面のHTMLとPageクラスを乗せます。 【入力画面サンプルHTML 一部抜粋】 <form id="form"> <table> <tr> <td><label id="userNameLabel"/></td> <td><input type="text" id="userName"/></td> </tr> <tr> <td><label id="passwordLabel"/></td> <td><input type="password" id="password"/></td> </tr> </table> <input type="button" id="doLogin" value="login" /> </form> 【入力画面サンプルPageクラス 一部抜粋】 public Class doLogin() { return LoginConfirmPage.class; } 【確認画面サンプルHTML 一部抜粋】 <form id="formConfirm"> <table> <tr> <td><label id="userNameLabel"/></td> <td><input type="text" id="userName"/></td> </tr> <tr> <td><label id="passwordLabel"/></td> <td><input type="password" id="password"/></td> </tr> </table> <input type="button" id="doLoginFinish" value="login" /> </form> 【確認画面サンプルPageクラス 一部抜粋】 public Class doLoginFinish() { return LoginFinish.class; } 【完了画面サンプルHTML 一部抜粋】 <body> <span id="allMessages"/> 完了!! </body> 【完了画面サンプルPageクラス 一部抜粋】 アクションクラスなし 以上、どなたかご教授願います。 [ メッセージ編集済み 編集者: 未記入 編集日時 2008-05-18 16:59 ] [ メッセージ編集済み 編集者: 未記入 編集日時 2008-05-18 17:02 ] [ メッセージ編集済み 編集者: machan1 編集日時 2008-05-18 17:11 ] |
|
投稿日時: 2008-05-18 17:52
一部抜粋では絶対に原因は解りません。
このパターンで考えられるのは・・・ 1.Convertor/Validatorで引っかかっている Pageクラスで親クラスを定義していて、そちらでConvertor/Validatorを定義している 確認画面から完了画面に遷移する場合に引っかかっているがエラーメッセージがでないので嵌る 対処)まずは<span id="allMessages"></span>を埋めておこう 2.formがネストしている formタグが正しく記述されていないと、正しくsubmitできない 対処) bodyタグの直後にformタグを記述し、それがネストしていないようにする あと、確認画面のhidden項目が不足しているというのが一番多いパターンです。 これも1で引っかかるはずです。 こちらは暗黙的なConvertorでエラーを起こしている場合もあります。 |
|
投稿日時: 2008-05-18 18:12
サンプル的に作成したコードですので、 表示される画面はおかしいですが、 求めている画面遷移ができるかどうかのテストの ために作りました。 いかに、ソース内の全てを記述します。 誤っている箇所をご指摘いただけないでしょうか? 【入力画面サンプルHTML login.html】 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Login</title> <style> .onTeedaError { background-color: #FFCCCC; } </style> </head> <body> <span id="allMessages"/> <form id="form"> <table> <tr> <td><label id="userNameLabel"/></td> <td><input type="text" id="userName"/></td> </tr> <tr> <td><label id="passwordLabel"/></td> <td><input type="password" id="password"/></td> </tr> </table> <input type="button" id="doLogin" value="login" /> </form> </body> </html> 【入力画面サンプルPageクラス LoginPage.java】 package test.web.login; import org.seasar.teeda.extension.annotation.validator.Required; public class LoginPage { @Required private String userName; @Required private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Class doLogin() { return LoginConfirmPage.class; } public Class initialize() { return null; } public Class prerender() { return null; } } 【確認画面HTML loginConfirm.html】 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Login</title> <style> .onTeedaError { background-color: #FFCCCC; } </style> </head> <body> 確認画面 <span id="allMessages"/> <form id="formConfirm"> <table> <tr> <td><label id="userNameLabel"/></td> <td><input type="text" id="userName"/></td> </tr> <tr> <td><label id="passwordLabel"/></td> <td><input type="password" id="password"/></td> </tr> </table> <input type="button" id="doLoginFinish" value="login" /> </form> </body> </html> 【確認画面サンプルPageクラス】 package test.web.login; public class LoginConfirmPage { private String userName; private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Class doLoginFinish() { return LoginFinishPage.class; } public Class initialize() { return null; } public Class prerender() { return null; } } 【完了画面サンプルHTML loginFinish.html】 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Login</title> <style> .onTeedaError { background-color: #FFCCCC; } </style> </head> <body> <span id="allMessages"/> ログイン完了!! </body> </html> 【完了画面サンプルPageクラス】 package test.web.login; public class LoginFinishPage { public Class initialize() { return null; } public Class prerender() { return null; } } |
|
投稿日時: 2008-05-18 18:38
単純だけど
<input type="button" id="doLogin" value="login" /> は <input type="submit" id="doLogin" value="login" /> にしないとsbumitされないからアクション呼ばれないんじゃないですか? |
|
投稿日時: 2008-05-18 18:42
ご回答ありがとうございます。
残念ながら、typeを buttonからsubmitに変更しましたが、 同じ現象が出てしまいます。 |
|
投稿日時: 2008-05-18 21:10
login.html 等はview/login/ に全て置かれていますか?
doLoginFinishをクリックした時、再描画になってしまうならばprerenderが呼ばれるはずです。 そこでBreakPointを張って、userName等に値が入っているか確認されましたか? あと、Confirm画面のレンダリングされたHTMLソースを貼り付けてください。 元のHTMLが意図した形に変換されているかを調べるのがコツです。 #FireFox+FireBugsが便利 >oshoさん Teedaではtype="button"が正解です。 レンダリングの時に、doXxxなIDが振られている場合は、submitへ変換されます。 |
|
投稿日時: 2008-05-18 21:40
あと、ぱっと見で気になったのは
<form id="formConfirm"> これですかね。 前にteeda使った時に form のidはFormで終わらないとinput系の動きがおかしくなる ことがあった気がします。 試しに id="confirmForm"等にしてやられてみてはどうですか? |
|
投稿日時: 2008-05-18 21:52
あー確かに。
基本的にformは <form id="form" > とか<form id="inputForm" > みたいにidを固定にしたほうが良いと思います。 |