0

このコードで ccViewTemplate を呼び出すカスタム コントロールがあります。

<xp:repeat id="repeatData" rows="30"
    value="#{viewEntry}" var="veData"
    first="#{javascript:return (sessionScope.ssFirst != null)?sessionScope.ssFirst:0;}">
<xp:panel id="panelSelect">
<xp:callback facetName="viewBodyFacet" id="callback1"></xp:callback>
</xp:panel><!-- panelSelect -->
</xp:repeat>

データベース ビュー (viewEntry) も ccViewTemplate で定義され、いくつかのカスタム プロパティに基づいて定義されます。ccViewTemplate は、ccFinalView と呼ばれる別のカスタム コントロールに追加されます。カスタム プロパティが入力され、表示の内容が viewBodyFacet に入力される場所。私は veData にアクセスでき、この時点まですべてがうまく機能しています。viewBodyFacet には、ドキュメントを開くためのリダイレクトを行うリンクがあり、これも正常に機能します。ただし、リンクでは、最初にrepeatDataプロパティを取得して保存し、繰り返しの正しいページに戻るようにしたいと考えています。私はこのコードを使用します:

sessionScope.put('ssFirst',getComponent("repeatData").first);

ただし、ccViewTemplate 内にありアクセスできないため、コードは getComponent("repeatData") を見つけることができません。ccViewTemplate を含む ccFinalView で、ccViewTemplate からコンポーネントの repeatData を取得する方法はありますか。

getComponent("ccViewTemplate") を実行し、カスタム コントロールへのハンドルを取得しましたが、getComponent("ccViewTemplate").getComponent("RepeatData").first が失敗します。それで、カスタムコントロールの「外側」からカスタムコントロールの「内側」のコンポーネントから値を引き出す方法はありますか? もう少し調べて、これを見つけました:

var rtn = getComponent("ccViewTemplate").getPropertyMap().getProperty("repeatData");

追加してもエラーは発生しませんが、何も返されません

var rtn = getComponent("ccViewTemplate").getPropertyMap().getProperty("repeatData").first;

getComponent() is null というエラーが表示されます

これが理にかなっていることを願っています。

4

1 に答える 1

0

私が理解していることから、これは Java Bean にとって完璧な仕事です。Bean はデフォルト値を保持することもできます。

public class Controller{

public String value;

public Controller(){
value = "default_value";
}

public String getValue(){return value;}
public void setValue(String value){this.value=value}

}

この方法では、オブジェクトが作成されるとすぐに値が使用可能になります。ボタンを押すと、javascript で値が設定されます。

ControllerBean.setValue("thisValue");

そして、あなたは値を読むことができます

ControllerBean.getValue();

この質問は、Bean の構成方法を示しています: How to setup a managed Bean to work with Notes document

これをたとえばviewScopeに設定すると、カスタムコントロールまたはメインページにあるかどうかに関係なく、必要な場所に値にアクセスできます。このアプローチを強くお勧めします。これは、カスタム コントロール構造を再考する可能性があることを意味します。

編集
追加のアイデアには、ビューを維持する列挙型が含まれます。

public enum Views{
VIEW_1("viewAlias", "urlParam")

private String vwAlias;
private String urlParam;
private Views(String alias, String param){
vwAlias = alias;
urlParam = param;
} 

// public getters
}

次に、コントローラーでビュー文字列を取得できます。

1. By seeing if a view param is included in the URL
2. If a cookie value is set
3. Take the hard coded default

ビューの変更アクションをクリックすると、Cookie 値が設定され、ビュー パラメータとリダイレクトが変更されます。

これはすべて余分なアイデアですが、ビュー コントローラーを構築する方法です。私はすぐにそれについてのチュートリアルを行う予定です。

于 2014-10-20T18:58:50.837 に答える