ダウンタイムの後、私は再びいくつかの xpages を行っていますが、すでに多くのことを忘れているようです。次のコードがあります。
データソース:
<xe:objectData var="league" ignoreRequestParams="true" scope="request">
<xe:this.saveObject><![CDATA[#{javascript:leagueService.set(league)}]]></xe:this.saveObject>
<xe:this.createObject><![CDATA[#{javascript:return leagueService.get(viewScope.currentKey);}]]></xe:this.createObject>
</xe:objectData>
そしていくつかのコンボボックス
<xp:comboBox id="idLeagueList" value="#{viewScope.currentKey}">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript: return eu.jeroensomhorst.cms.util.JSFUtil.asSelectItem(leagueService.getAll(season),true);}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler event="onchange" submit="true" refreshMode="complete"></xp:eventHandler>
</xp:comboBox>
<xp:listBox id="lstAvailableTeams">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:eu.jeroensomhorst.cms.util.JSFUtil.asSelectItem(teamService.getAll());}]]></xp:this.value>
</xp:selectItems>
</xp:listBox>
lstAvailableTeams で選択したチームを選択したリーグ オブジェクトに追加するボタン
<xp:button value=">" id="addTeam" >
<xp:eventHandler event="onclick" submit="true" refreshMode="complete" disableValidators="true">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var teamList = getComponent("lstAvailableTeams");
var strTeamKey = teamList.getValue();
eu.jeroensomhorst.cms.util.LeagueUtil.addTeam(league.getKey(),strTeamKey);}]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:this.action></xp:eventHandler></xp:button>
<xp:listBox id="leagueTeams">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:return eu.jeroensomhorst.cms.util.JSFUtil.asSelectItem(league.getTeams());}]]></xp:this.value>
</xp:selectItems>
</xp:listBox>
Leagueutil のコードは次のようになります。
public static void addTeam(String leagueKey,String key){
LeagueService lService = (LeagueService) DominoUtil.getVariableValue("leagueService");
League l = (League) lService.get(leagueKey);
TeamService service = (TeamService) DominoUtil.getVariableValue("teamService");
Team t = service.get(key);
Vector<Team> teams = l.getTeams();
if(teams == null){
teams = new Vector();
teams.add(t);
}else{
if(!teams.contains(t)){
teams.add(t);
}
}
l.setTeams(teams);
// save into database.. this works.
lService.set(l);
}
空想するものは何も見えないので。しかし、問題は次のとおりです。idLeagueList コンボボックスの値を変更して changelistener を実行するたびに ( viewscope を更新します)。これは、leagueteams コンボボックスに表示されている以前の値を常に取得します。それは本当に基本的な質問ですが、私は完全に選択肢がありません..