1

ページに「読み取り専用」にしたいフィールドがいくつかあります(つまり、アクセスできませんが、値が格納されます。問題が発生した場合は、この問題に関する以前の質問を読んでください...)

ページの読み込み時にこれらの属性を設定するクライアントJSを使用します。

$(".readonly").attr('readonly', true);

これらのフィールドのいずれかを部分的に更新すると、属性が失われ、フィールドにアクセスできるようになります。

これを克服して機能させるためのベストプラクティスは何ですか?

4

3 に答える 3

3

すべての部分更新には、oncompleteメソッドがバインドされています。できることは、oncompleteメソッドにコードを追加して、アイテムが再び読み取り専用に設定されるようにすることです。もう1つのより良いアプローチは、クライアント側の属性を変更するのではなく、データを格納するために使用される非表示のフィールドを使用することです。

たとえばリンクコントロールにバインドされたイベントがある場合、イベントタグのソースペインをクリックして、oncompleteコードを変更できます。プロパティペインのイベントセクションを参照すると、onComplete、onError、onStartプロパティが表示されます。これらのプロパティに独自のクライアントサイドスクリプトを追加できます。

スクリーンショット

于 2013-03-26T08:26:51.760 に答える
1

「問題」を克服しようとする前に、部分的な更新が何を行うのか、そしてアプリケーションの状態がどこに保持されているのかを理解する必要があります。

残念ながら、部分的な更新では、現在のhtmlコンテンツ(またはその一部)が新しく作成されたものに置き換えられ、バッキングコントロールを持つフォームフィールドのみが状態を保持します。

読み取り専用にしたいコントロールに読み取り専用プロパティを設定してみることをお勧めします(ここにロジックがある場合は、いつでもssjsを使用できます)。

オプションで、csjsグローバル変数を使用してクライアント側で状態を保持しようとすることができますが、これは管理がかなり困難です。

そしてもう1つ、テクノロジーを使用して問題を解決し(xpages)、誤って知っているもの(jquery)を使用してハッキングしないようにしてください。

于 2013-03-26T08:56:00.173 に答える
0

イベントの使用については、 jjtbsomhorstに同意します。onCompleteただし、別の方法として、次のreadonlyようなコードを使用してプロパティを設定することもできます。

var textField:com.ibm.xsp.component.xp.XspInputText = getComponent("inputText1");
var readOnlyAttr:com.ibm.xsp.complex.Attr = new com.ibm.xsp.complex.Attr("readonly", "readonly");
var list:java.util.ArrayList = new java.util.ArrayList();
list.add(readOnlyAttr);
textField.setAttrs(list);

afterPageLoadXPageのイベントでこれを呼び出すことができます。しかし、これが最善の方法であるかどうかは本当にわかりません。

于 2013-03-26T09:49:23.133 に答える