- PR -

メニュ画面の2重表示

投稿者投稿内容
Mxfull
大ベテラン
会議室デビュー日: 2006/02/15
投稿数: 146
投稿日時: 2006-02-15 12:57
お世話になります。
私は現在JSFでWebソフトを作っています。画面にはFrameSetで設計しました。
左のFrameにはメニューの表示で、右のFrameには本体の表示です。
ただ、左のメニューをクリックすると、時々そのメニューの内容は右の本体の
部分に表示してしまいました。今悩んでいますが、ご存知の方は
是非解決方法を教えてください。
Mxfull
大ベテラン
会議室デビュー日: 2006/02/15
投稿数: 146
投稿日時: 2006-02-15 14:58
自己返信です。
JSFのPGですが、画面にはFramesetで左のメニューと右の内容表示の
二つの部分を分けています。メニューの項目をクリックすると、該当する
JSPページを右のFrameに表示するはずですが、時々メニューのFrameに表示
している内容(メニュー項目)を右のFrameに表示してしまいました。
ただもう一回同じのメニュー項目をクリックすると、該当するJspページが
右のFrameに表示できます。ご存知の方は是非ご教授ください。
Mxfull
大ベテラン
会議室デビュー日: 2006/02/15
投稿数: 146
投稿日時: 2006-02-15 16:27
自己返信ですが、推測てきな原因がご存知ならいいですが、
ご返信ください。
henachoco
常連さん
会議室デビュー日: 2005/11/21
投稿数: 29
お住まい・勤務地: 新ハンドル:t_yamo
投稿日時: 2006-02-16 12:15
Mxfullさんのアプリケーションでメニューをどのように実装しているのかがわかりませんので正確な回答はできませんが、おそらくメニューの中に複数のsubmit要素が混在しているのではないかと思います。

ここで言う「複数のsubmit要素」というのは、Mxfullさんが意識していない部分でsubmitしてしまうような要素を含みます。

例えば、私が過去に出会った類似の事例は以下のようなものでした。

 ・画面の左右をフレーム分割し、左のフレームにメニューを設置
 ・メニューはMyFacesの拡張コンポーネントTomahawkの<t:panelTabbedPane>
  の中にあり、メニューの大分類ごとにタブを分割
 ・メニュー本体はTomahawkの<t:tree2>を利用

このとき、私は<t:tree2>で生成したメニュー項目をクリックしたときに右のフレームにサービスの画面を表示したかったため、メニューが格納されている<h:form>のターゲットに右のフレームの名称を設定しました。
この実装によって、確かにメニュー項目をクリックしたときに正しく右のフレームにサービスの画面が表示できるようになりました。
しかし、メニューの大分類を選択しようとして<t:panelTabbedPane>のタブをクリックした場合、本来であれば左のフレームのメニューが切り替わって欲しかったのですが、実際には右のフレームにメニューが表示されてしまいました。
これは、メニュー項目をクリックしたときのために設定した<h:form>のターゲットが、別の処理でも使われてしまっていることが原因です。
私のケースでは業務仕様としてそもそも<t:panelTabbedPane>が不要であったため、<t:panelTabbedPane>と<t:tree2>を混在させないことで対応しましたが、混在させる場合はそれぞれのsubmit時にターゲットを切り替えてあげる必要があるかと思います。

冒頭で記したようにMxfullさんの実装がどうなっているのかわからないため、上記と原因が同じであるかどうかはわかりませんが、ひとまず何かの参考になったら幸いです。

どのように実装しているのかを記して頂けるともう少し正確な回答が出てくるのではないかと思います。
Mxfull
大ベテラン
会議室デビュー日: 2006/02/15
投稿数: 146
投稿日時: 2006-02-16 13:25
henachocoさん、有難うございます。

下記は略されたメニューの実装です。どこに問題があるかご教授ください。

宜しくお願いいたします。

<html>
<HEAD>
<SCRIPT language="JavaScript">
<!--
flag = false;
function treeMenu(tName) {
var tMenu = document.all[tName].style;
if(tMenu.display == 'none') tMenu.display = "block";
else tMenu.display = "none";
}
//-->
</SCRIPT>
</HEAD>
<body class="bg" link="#519191" vlink="#519191" alink="#CC6600">
<f:view>
<h:form id="f1" enctype="application/x-www-form-urlencoded" target="B">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<table align="center" cellspacing="0" class="font4">
<tr>
<td>
<h:commandLink action="#{nippou.init}" target="B">
<h:outputText value="日報"/>
</h:commandLink>
</td>
</tr>
・・・
<tr>
<td>
<a href="javaScript:treeMenu('treeMenu1')">マスターメンテ</a>
</td>
</tr>
   </table>
</td>
</tr>
<tr>
<td>
<DIV id="treeMenu1" style="display:none">
<table border="0" align="center" cellpadding="0" cellspacing="0" class="font5">
<tr>
<td>
<h:outputText value="・"/>
<h:commandLink action="#{projectJP.init}" target="B" rendered="#{mgr.renderone}">
<span style="color:#333333">
<h:outputText value="プロジェクト管理"/>
</span>
</h:commandLink>
<h:outputText value="プロジェクト管理" rendered="#{not mgr.renderone}"/>
</td>
</tr>
・・・
</table>
</DIV>
</td>
</tr>
</table>
<input type="hidden" name="_id0" value="_id0" /><input type="hidden" name="_id0:_idcl"

/>
</h:form>
</f:view>
</body>
</html>

henachoco
常連さん
会議室デビュー日: 2005/11/21
投稿数: 29
お住まい・勤務地: 新ハンドル:t_yamo
投稿日時: 2006-02-16 14:02
見た感じ問題はなさそうですね。
標準のコンポーネント以外は使っていないので、知らないところでsubmitが発生するということもなさそうですし。

で、時間があったので実際にMxfullさんのソースを貼り付けて実行してみたところ、希望どおりの挙動(メニュー項目をクリックしたら右フレームにサービス画面が表示される)が実現できているようです。

JSP周りに問題がないのであれば、他に疑うところは#{projectJP.init}の戻り値ぐらいかなぁと思います。
このメソッドがnullや""を返したり、あるいは戻り値が設定されないケースがあると右フレームにリクエスト発行元(今回の場合はメニュー画面)が表示されてしまうと思うのですが、この#{projectJP.init}の中で上記のような戻り値が設定される箇所はないでしょうか。
あと、実は#{projectJP.init}の中でログに出力されないようなエラーが発生していたとか。

[ メッセージ編集済み 編集者: henachoco 編集日時 2006-02-16 14:03 ]
Mxfull
大ベテラン
会議室デビュー日: 2006/02/15
投稿数: 146
投稿日時: 2006-02-16 16:46
henachocoさん、有難うございます。

確か、#{projectJP.init}の戻り値はnullである可能性があります。
この部分を変更して解決できると思います。
大変な助かりになりました。有難うございました。
Mxfull
大ベテラン
会議室デビュー日: 2006/02/15
投稿数: 146
投稿日時: 2006-02-19 20:22
やはりだめです。
#{projectJP.init}の戻り値はnullでないようにセットしても
メニュー画面はサービスの画面に表示してしまう場合があります。実はPGリストでは
メニューの項目は10何個があります。全てのメニュー項目を連続でクリックすると
必ずメニュー画面は二重表示となってしまいます。どういう原因が考えられますか?
ご教授お願いいたします。

スキルアップ/キャリアアップ(JOB@IT)