String verändern

  • Themenstarter Themenstarter StringerClub
  • Beginndatum Beginndatum
S

StringerClub

Gast
Hallo,

zu meinem Problem:

Ich lese in einem inputfield einen String ein, löse ein Event über ajax "blur" aus und damit eine Methode, die den eingegebenen String verändern soll.

nehmen wir an ich gebe in das Inputfield "Hallo" ein und möchte dass nach Fokusverlust("blur") statt Hallo ein Ciao in dem Feld steht.

Nun sind Strings jedoch immutable, wie stelle ich das nun an? :/

Ich hoffe ihr versteht, was ich meine..

Gruss
 
Wo muss das dann rein?
In die xhtml?
Kannst mir da n Beispiel machen, wenn ich nun in meiner Methode in der Bean einen String habe

String x= y + z ;

x heisst das inputfield, also der String den ich eingegeben habe und bearbeitet habe, aber x wird ja nun nicht verändert..?
 
Also wenn du einen statischen Text bei onblur haben willst, dann würd ich das in der xhtml über ein JavaScript machen. Beispiel folgt später😉
 
Kein JavaScript bitte, bin cih sehr schlecht drin..

Geht das nicht mit Java? will ja nur den Wert des input fields verändern..
 
Java:
	public String getUhrzeit() {
		return uhrzeit;
	}

	public void setUhrzeit(String uhrzeit) {
		this.uhrzeit = uhrzeit;
	}


sieht so aus.. wie soll ich die umschreiben?

Gruss.
 
Du löst nach Fokusverlust ein rerender auf das Feld aus, dann wird ja, falls richtig verbunden, die Getter-Methode der Bean noch einmal aufgerufen. Und dort gibst du halt immer deinen Text zurück.


Java:
    public String getUhrzeit() {

        /* Hier kannst du machen was du willst. Logik oder nur statischen Text wie du magst*/

        //return "PIPAPO";
        return uhrzeit;
    }
 
    public void setUhrzeit(String uhrzeit) {
        this.uhrzeit = uhrzeit;
    }
 
Das ist meine xhtml:

<p:ajax event="blur" process="@this" listener="#{cc.attrs.backingBean.onTimeChange}" update="@this"/>


Meine Bean sieht so aus:

Java:
public void onTimeChange() {

	String stunden= uhrzeit.substring(0, 2);
	String minuten= uhrzeit.substring(3, 5);
	
	int eins= Integer.parseInt(stunden);
	int zwei= Integer.parseInt(minuten);

	
	if(eins>=0&&eins<10 && stunden.length()==1){
		stunden= "0" + stunden;
	}
	
	if(zwei>=0&&zwei<10 && minuten.length()==1){
		minuten= minuten+"0";
	}
	
	if(eins<0 || eins>24){
		stunden= "";
	}
	if(zwei<0 || zwei>60){
		
		minuten="";
	}
	
	uhrzeit= stunden + ":" + minuten;
  }

Die Getter wie von eben:

Java:
	public String getUhrzeit() {
		return uhrzeit;
	}

	public void setUhrzeit(String uhrzeit) {
		this.uhrzeit = uhrzeit;
	}


Verstehe nicht ganz, wo was ändern.
Die Zeile uhrzeit= stunden + ":" + minuten; in der letzten Zeile über dem Getter & Setter hat ja keine Auswirkung auf das inputField.
 
Ich möchte das bei Fokusverlust meines Inputfields der String geändert wird.

Das erfolgt über das event blur, also ajax.

Das verändern des Strings geht aber nicht, da ja Strings unveränderlich sind, wie soll ich das dann anstellen in meiner Bean, dass der veränderte String in die xhtml bzw inputfield zurück gegeben wird?

gruss & sorry für die verspätete Antwort
 
Dein InputField ist doch an die Bean gebunden. Mach doch bei onblur einfach ein rerender mit der FeldID. Dann greift er nochmal auf die Set-Methode der Bean zurück, und dort übergibst du deinen veränderten String. Schon mal probiert?
 
z.B. [japi]JTextField#setText(String)[/japi]
Ist zwar jetzt ein Swing-Beispiel aber ich kann mir nicht vorstellen das es sowas nicht auch in JSF gibt.
 
Danke für die Antworten.

renderer habe ich noch nie probiert, wie füge ich das bei dem "blur" Event dazu?

Meinen xhtml Code habe ich ja oben weiter gepostet.

Was kommt dann in die Setter Methode rein?

Danke für dein Durchhalten mit mir Soul 🙂
 
Nichts zu danken! 🙂

HTML:
<h:inputText value="#{MeineBean.Text}"> 
<a4j:support event="onblur" reRender="ID des zu rerendernden Elementes"/>
</h:inputText>
 

Neue Themen


Zurück
Oben