私は4つの編集ボックスとボタンを含むxpageを持っています。これらはExcelでデータをエクスポートするために使用されます。私は、これらの4つのエディットボックスでセッションスコープを使用します。これは、Excelを生成するために値を保存しているためです。xpages:編集ボックスを読み取り専用にする方法とセッションスコープ変数を使用する方法はありますか?
デザインの外観は、次のようになります。
//1st edit box: get the user name, set it to default so the user does not need to type his/her name
<xp:inputText id="inputText1" value="#{sessionScope.User}">
<xp:this.defaultValue><![CDATA[#{javascript: @Name("[CN]",@UserName())}]]></xp:this.defaultValue>
</xp:inputText>
//2nd edit box: after get the user name in edit box 1, retrieve the user's department in this edit box
<xp:inputText id="inputText2"value="#{sessionScope.Department}">
<xp:this.defaultValue><![CDATA[#{javascript:@DbLookup(@DbName(),"UserView", (getComponent("inputText1").getValue()),2 )}]]></xp:this.defaultValue>
</xp:inputText>
//3rd edit box: get the start search date in YYYYMM format, user only can type numbers
<xp:inputText id="inputText3" value="#{sessionScope.startYYYYMM}">
<xp:eventHandler event="onkeypress" submit="false">
<xp:this.script><![CDATA[if (event.keyCode >= 48 && event.keyCode <= 57)
{
event.returnValue = true;
}
else
{
event.returnValue = false;
}]]></xp:this.script>
<xp:this.parameters>
<xp:parameter name="message1" value="value">
/xp:parameter>
</xp:this.parameters>
</xp:eventHandler>
</xp:inputText>
//4th editbox: get the endsearch date in YYYYMM format, user only can type numbers
<xp:inputText id="inputText4" value="#{sessionScope.startYYYYMM}">
<xp:eventHandler event="onkeypress" submit="false">
<xp:this.script><![CDATA[if (event.keyCode >= 48 && event.keyCode <= 57)
{
event.returnValue = true;
}
else
{
event.returnValue = false;
}]]></xp:this.script>
<xp:this.parameters>
<xp:parameter name="message1" value="value">
/xp:parameter>
</xp:this.parameters>
</xp:eventHandler>
</xp:inputText>
//a button to call another page to export the excel
<xp:button value="Export" id="button11">
<xp:eventHandler event="onclick" submit="true" immediate="false" save="false" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:context.redirectToPage("ExportExcel.xsp");}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
私は、コードを実行し、それが正常に動作します。しかしここに私が尋ねたいことがあります。最初と2番目の編集ボックスで、これらの編集ボックスを[読み取り専用]に設定するとします。それはセッションのスコープ変数を失うようだと私はコードを実行し、Excelは、単にデフォルトのヘッダーが含まれています。
//for 1st editbox
<xp:scriptBlock id="scriptBlock1">
<xp:this.value><![CDATA[function makeFieldReadOnly() {
document.getElementById("#{id:inputText1}").readOnly = true;
}
window.onload = makeFieldReadOnly;]]></xp:this.value>
</xp:scriptBlock>
//for 2nd edit box
<xp:scriptBlock id="scriptBlock2">
<xp:this.value><![CDATA[function makeFieldReadOnly() {
document.getElementById("#{id:inputText2}").readOnly = true;
}
window.onload = makeFieldReadOnly;]]></xp:this.value>
</xp:scriptBlock>
編集ボックスはまだ編集可能とExcelがある:私はこの記事ReadOnly field in Xpage not submittedが私の場合と非常によく似ているので、私が編集可能にエディットボックスを設定し、ポストからこのコードを適用しよう見つける
正しく動作しません(デフォルトヘッダーのみを表示します)。
私はどのように編集ボックスを読み取り専用にしても、セッションスコープ変数を持つことができますか?
お気軽にご相談ください。ありがとうございました。
参考:あなたは、例えばであなたの2つのsessionScopeと変数の値を計算することができます
ReadOnly field in Xpage not submitted
最初の2つの編集ボックスは、sessionScope変数の値のみを表示する必要がありますか? 2つのsessionScope変数をユーザーが変更しないでください。次に、sessionScope変数の値を例えばに設定します。 beforeRenderResponseイベント –
こんにちは@PerHenrikLausten、あなたのお返事ありがとうございます。 "2つのsessionScope変数はユーザによって変更されるべきではありませんか?"、はい、それは当てはまります。プログラムのユーザ要件、そのxpageにログインするユーザ要求、ユーザ名、部門が自動的に表示されます。 "最初の2つのエディットボックスは、sessionScope変数の値を表示するだけですか?"というのは、sessionScope変数を使用しないと、エクセルでデータを書き出すことができないためです。目標。 – beginner
beforeRenderResponseイベントを正しく使用する方法がわかりません。そこに 'sessionScope.Officer&sessionScope.Department'を置いて、エディットボックスは編集可能です。 – beginner