Eine Combobox ist an eine Java-Bean gebunden. Dokumente werden im Lesemodus geöffnet und der ausgewählte Wert wird angezeigt.Xpages: Combobox behält keinen Wert beim Übergang vom Lese- zum Bearbeitungsmodus
Aber wenn ich in den Edit-Modus wird der Wert "verloren".
Ich möchte auf der Seite machen zwei Felder vermeiden, aber ich denke, ich kann, wenn ich muss. Aber es scheint, dass mit meinem Code oder meinem Ansatz etwas nicht stimmt.
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.afterPageLoad><![CDATA[#{javascript:sessionScope.models = PCConfig.models;
viewScope.readOnly = "Yes";}]]></xp:this.afterPageLoad>
<xp:button value="Toggle Edit Mode" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:if (viewScope.readOnly == "Yes")
{viewScope.readOnly = "No"}
else
{viewScope.readOnly = "Yes"}}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:text escape="true" id="computedField1" value="#{viewScope.readOnly}"></xp:text>
<xp:br></xp:br>
<xp:panel id="pnlAll">
<xp:this.data>
<xe:objectData saveObject="#{javascript:PCModel.save()}"
var="PCModel">
<xe:this.createObject><![CDATA[#{javascript:var pc = new com.scoular.model.PC();
var unid = sessionScope.get("key");
if (unid != null) {
pc.loadByUnid(unid);
sessionScope.put("key","");
viewScope.put("readOnly","Yes");
} else {
pc.create();
viewScope.put("readOnly","No");
}
return pc;}]]></xe:this.createObject>
</xe:objectData>
</xp:this.data>
<xp:comboBox id="model" value="#{PCModel.model}"
disableValidators="true" disableClientSideValidation="true"
styleClass="form-control">
<xp:this.attrs>
<xp:attr name="disabled" value="disabled">
<xp:this.rendered><![CDATA[#{javascript:if (viewScope.readOnly == "Yes")
{return true}
else
{return false}}]]></xp:this.rendered>
</xp:attr>
</xp:this.attrs>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:"--Select A Value--|"}]]></xp:this.value>
</xp:selectItems>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:sessionScope.models}]]></xp:this.value>
</xp:selectItems>
</xp:comboBox>
</xp:panel>
</xp:view>
Außerdem werden gerenderte Berechnungen während des partiellen Refresh-Lebenszyklus mehrmals ausgeführt, was ebenfalls zu einer (wenn auch geringen) Leistungsverbesserung führt. Außerdem haben Panels eine schreibgeschützte Eigenschaft. Abhängig von Ihren Funktionen und Anforderungen kann dies ein alternativer Ansatz sein, insbesondere wenn Sie mehrere Komponenten im selben Panel haben. –
Paul, ausgezeichnete Vorschläge. Mein Entwurf bedeutet, dass ich Gruppen von Feldern aktivieren/deaktivieren muss. Daher werde ich die Gruppen in separate Bereiche einfügen und auf dieser Ebene aktivieren/deaktivieren. –