3 Stimmen

Füllen eines inputTextAreas mit Inhalt aus mehreren selectOneMenus und Schaltflächen

Ich möchte eine kleine Benutzeroberfläche erstellen, die dem Benutzer die Möglichkeit bietet, einige mathematische Formeln auf eine einfachere Art und Weise zu schreiben (daher die Benutzeroberfläche) und in der Lage zu sein, sie in einer .txt-Datei (oder etwas Ähnlichem) zu speichern.

Zum Beispiel: Ich habe 3 Selectboxen, die eine Vielzahl von Optionen anbieten, einige Buttons, die mathematische Operationen darstellen und einen inputTextArea. Bisher habe ich es geschafft, ausgewählte Inhalte aus jedem selectOneMenu und aus ein paar inputText's zu verknüpfen und sie mit dem, was ich brauche, zu verketten und die erstellten mathematischen Formeln in eine .txt-Datei zu schreiben.

Jetzt möchte ich dem Benutzer die Möglichkeit bieten, die Formel, die er schreibt, zu sehen (durch Auswahl des Inhalts und Drücken von Schaltflächen), während er sie ausführt. Bisher habe ich versucht, das mit einer inputTextArea zu machen, aber das Beste, was ich geschafft habe, war, den ausgewählten Inhalt von nur einer selectOneMenu zum textArea und danach sind alle meine Versuche, jede Aktion des Benutzers zum textArea hinzuzufügen, fehlgeschlagen (jemand schlug vor, mit <h:panelGroup> Ich habe versucht, alle Bohnen, die ich zum Füllen der Menüs verwendet habe, zu einer einzigen Bohne zusammenzufassen und von dort aus weiterzugehen, aber auch das hat nicht funktioniert.)

Ein Beispiel für den JSF-Teil, an dem ich bisher gearbeitet habe, mit 2 Selectboxen und der TextArea:

<h:outputText value="Formula Name"></h:outputText>
<h:inputText value="#{output.formulaName}" id="formulaName"></h:inputText>              
<br /><br />

The formula so far:
<h:inputTextarea value="#{output.propertyReferenceValue}"></h:inputTextarea>
<br/><br/><br/>

Property1:
<h:selectOneMenu  value ="#{output.propertyReferenceValue}" id="selectTwo"  
    valueChangeListener="#{output.propertyReferenceValueChanged}" onchange="submit()">
    <f:selectItems value="#{property.propertyReference}"/>              
</h:selectOneMenu>
<br/><br/>
Property2:         
<h:selectOneMenu value ="#{output.property2ReferenceValue}" id="selectThree"  
    valueChangeListener="#{output.property2ReferenceChangedValue}" onchange="submit()">
    <f:selectItems value="#{property2.property2Refference}" />            
</h:selectOneMenu>

Für jede Hilfe wären wir dankbar.

PS. Ich bin sehr neu in JSF (begann vor etwa 2 Tagen), so werde ich schätzen auch auf einige Dokumentation, die diese oder ähnliche Probleme abdecken könnte gezeigt werden.

0voto

BalusC Punkte 1034465

Sie missbrauchen im Grunde die valueChangeListener hier. Sie sind nicht wirklich an der Wertänderung interessiert (d. h. Sie sind nicht an der beide den alten und den neuen Wert), ist man nur an dem übermittelten Wert interessiert. Dies wurde in JSF 1.x toleriert, wenn man keine Ajax-basierte Komponentenbibliothek verwenden wollte/konnte/konnte. Es gibt (ziemlich komplizierte) Möglichkeiten, Ihr spezielles Problem mit dem valueChangeListener aber in JSF 2.x, das mit eingebauten Ajax-Fähigkeiten ausgeliefert wird, kann dies wirklich nicht mehr auf diese Weise geschehen. Sie sollten lieber die <f:ajax> Tag, um asynchrone Übermittlungen und teilweise Aktualisierungen einzuführen.

Schreiben Sie Ihre Ansicht wie folgt um:

Formula name:
<h:inputText value="#{output.formulaName}" id="formulaName" />
<br/><br/>

The formula so far:
<h:inputTextarea id="formula" value="#{output.propertyReferenceValue}#{output.property2ReferenceValue}"></h:inputTextarea>
<br/><br/>

Property1:
<h:selectOneMenu value="#{output.propertyReferenceValue}" id="selectTwo">
    <f:selectItems value="#{property.propertyReference}"/>
    <f:ajax render="formula" />
</h:selectOneMenu>
<br/><br/>

Property2:         
<h:selectOneMenu value ="#{output.property2ReferenceValue}" id="selectThree">
    <f:selectItems value="#{property2.property2Refference}" />            
    <f:ajax render="formula" />
</h:selectOneMenu>

Das ist alles. Ihr #{output} Bohne sollte in den Geltungsbereich der Ansicht gesetzt werden durch @ViewScoped . Es sind keine zusätzlichen Zuhörermethoden erforderlich. Nur wenn Sie die Werte vor der Anzeige manipulieren wollen, benötigen Sie einen Ajax-Listener. Z.B..

Formula name:
<h:inputText value="#{output.formulaName}" id="formulaName" />
<br/><br/>

The formula so far:
<h:inputTextarea id="formula" value="#{output.formula}"></h:inputTextarea>
<br/><br/>

Property1:
<h:selectOneMenu value="#{output.propertyReferenceValue}" id="selectTwo">
    <f:selectItems value="#{property.propertyReference}"/>
    <f:ajax listener="#{output.calculateFormula}" render="formula" />
</h:selectOneMenu>
<br/><br/>

Property2:         
<h:selectOneMenu value ="#{output.property2ReferenceValue}" id="selectThree">
    <f:selectItems value="#{property2.property2Refference}" />            
    <f:ajax listener="#{output.calculateFormula}" render="formula" />
</h:selectOneMenu>

mit z.B. (dieses Einstiegsbeispiel macht eine einfache Verkettung auf Komma, Sie haben aber die volle Freiheit, die formula Wert nach Ihren Wünschen):

public void calculateFormula() {
    formula = propertyReferenceValue + ", " + property2ReferenceValue;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X