2016-07-13 10 views
1

Ich bin ein Anfänger bei JSTL, wie ich es erst vor kurzem verwendet, um die Verwendung von Scriplets in meiner JSP zu vermeiden, und ich wollte um Hilfe bitten über etwas, in dem ich stecken geblieben bin.Dynamisch ändern Textfeld Wert mit JSTL

Ich habe ein Select-Element, das ich mit einer Arraylist mit JSTL füllen konnte. Allerdings muss ich auch den Wert eines schreibgeschützten Textfelds dynamisch ändern, wenn eine andere Option in der Dropdown-Liste ausgewählt wird, und der Wert, der in das Textfeld eingegeben wird, befindet sich in der Arraylist auf dem gleichen Index wie die ausgewählte Option Ich habe Probleme mit.

<select id="department" onchange="managerfill()"> 
<c:forEach var="dept" items="${departments}"> 
<option value="${dept.deptname}"><c:out value="${dept.deptname}"/></option> 
</c:forEach> 
</select> 

<input type="text" id="manager" readonly> 

Ich versuchte, eine js-Funktion zu verwenden, um das Textfeld den Wert zu ändern, aber so weit, ich habe kein Glück gehabt mit bekommen, damit es funktioniert.

function managerfill() { 
var x = document.getElementById("department").selectedIndex; 
document.getElementById("manager").value="${departments[x].manager}"; 
} 

Es wäre einfacher gewesen, wenn beide Abteilung und Manager Felder beiden Dropdown-Listen sind, aber wir waren erforderlich Manager ein Textfeld zu machen, so bin ich irgendwie zu einem Verlust versuchen, um ihn zu arbeiten.

Antwort

2

Sie können die Sprache jstl nicht auf gerenderten Seiten verwenden. jstl ist nur serverseitig und kann nicht im Browser des Endbenutzers verwendet werden.

Sie müssen js verwenden, um es zu ändern.

Die Funktion, die Sie geschrieben haben, ist gut, erwarten Sie die JSTL-Syntax, die nicht mehr interpretiert werden kann.

function managerfill() { 
    var select = document.getElementById("department"); 
    var x = select.selectedIndex; 
    document.getElementById("manager").value = select.options[x].text; 
} 

So etwas sollte funktionieren.

Aber ich denke, dass der Text, den Sie drucken möchten, Server-Seite ist, so können Sie es in einigen HTML/Tag oder versteckte Auswahl drucken und das Ergebnis daraus nehmen. ersetzen die select.options[x].text:

<select id="departments-manager" class="hidden"> 
    <c:forEach var="dept" items="${departments}"> 
    <option value="${dept.manager}"><c:out value="${dept.manager}"/></option> 
    </c:forEach> 
</select> 


function managerfill() { 
    var select = document.getElementById("department"); 
    var selectManager = document.getElementById("departments-manager"); 
    var x = select.selectedIndex; 
    document.getElementById("manager").value = selectManager.options[x].text; 
} 
+0

Danke dafür! Die Idee, ein verstecktes Auswahlfeld zu verwenden und seinen Wert in die Textbox zu legen, kam mir in den Sinn, als ich gestern darüber nachdachte, aber das ist viel sauberer als ich es mir vorgestellt habe. –