Selectbox Problem in JSP

Status
Nicht offen für weitere Antworten.

Athro

Mitglied
Hallo,
ich habe in einer JSP eine Selectbox , die eine Liste von Elemente Zeigen sollte.
Wenn der User ein Element von der Liste auswählt, soll es eine Action auslösen.
Code:
<html:form styleClass="displayInline" method="get"
		action="/meinAction.do"
		onsubmit="if(returnTaste==1)return false;">
<logic:notEmpty name="MeinForm" property="MeineListe">
<html:select styleClass="aaaa" name="MeinForm"  property="meinProp" onchange="submit()">
<html:options styleClass="aaaa" name="meinForm" property="MeineListe" /> 
</html:select>
<html:hidden property='selected' value='meinWert' />
</logic:notEmpty>
<logic:empty name=" MeinForm " property=" MeineListe ">
<select class="aaaa" onclick="submit()" disabled>
</select>
</logic:empty>
</html:form>

Es funktioniert für alle Elemente der gezeigten Liste, aber beim klicken des ersten Attributes funktioniert es nicht.

Damit ich das erste Element auswählen kann, muss ich ein andres Attribut auswählen und dann das erste Attribut!

Hätte die Liste nur einen Element, wird kein (Event) erzeugt

Ich könnte das erste Element der Liste mit Lehrstring setzen, aber das möchte ich nicht :noe: , denn der User soll sehen, dass die Liste nicht Lehr ist.

Hat jemand eine Idee

Vielen Dank
 
Wozu sollte auch ein Event erzeugt werden, wenn der dargestellte Wert bereits der aktuelle ist. Der angezeigte Wert bezieht sich ja auf die bestehende Maske.

Wenn du bei jedem Anwählen eines Items einen Event erzeugen möchtest verwende onClick statt onChange.
 
versuch mal onchange

und für die vorinitialisierung sollte man im body tag das gewünschte Prozedere in onload einmal aufrufen.
 
ich benutzte Das Frame Work Struts und in der JSP include folgende Libs:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
 
hallo, sorry wegen eben habs etwas falsch verstanden. Ich hab mir das jetzt mal angeschaut und es in einem Tomcat 6.0 mit java 1.6 und struts 1.3.8 nachgebildet.

onclick wird hier bei mir auch als valid angegeben. das problem, das ich allerding habe ist, dass er es nun bei jedem click direkt submitted, ohne dass ich in der lage bin andere values auszuwählen, also das onclick wird da glaub ich auch nicht wirklich die Lösung sein. Normal muss man den User zum auswählen Zwingen, was man wie schon erwähnt mit einem leeren Feld erreicht. Ist das so schlimm, wenn da steht "Bitte wählen"?



Der Code:
Ich habe es etwas abgeändert, damit es bei mir läuft. Ich habe allerdings den Verdacht, dass er meinForm in deinem options Tag und MeinForm in deinem select Tag nicht wirklich auseinanderhalten kann, bei mir wirft er da eine Exception.

JSP
Code:
<%@ taglib uri="/WEB-INF/struts-html" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic" prefix="logic" %>


<html>
<head>
<title></title>
</head>
<body>

<html:form styleId="meinForm" method="get" action="/meinAction">
<logic:notEmpty name="meinForm" property="list">
<html:select name="meinForm"  property="selectedListItem" onchange="submit()">
<html:optionsCollection name="meinForm" property="list" />
</html:select>
<html:hidden property="selected" value="meinWert" />
</logic:notEmpty>
<logic:empty name="meinForm" property="list">
<select onclick="submit()" disabled>
</select>
</logic:empty>
</html:form>
</body>

</html>

Action
Code:
package de.server.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import de.server.struts.form.MeinForm;

public class MeinAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		MeinForm mf = (MeinForm)form;
		
		System.out.println("Called action "+mf.getSelected() + " "+mf.getSelectedListItem());
		
		return super.execute(mapping, form, request, response);
	}
}


Form
Code:
package de.server.struts.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.LabelValueBean;

public class MeinForm extends ActionForm {

	

	private static final long serialVersionUID = -6309808242870816258L;
	
	private String selectedListItem = "";
	private LabelValueBean[] list = new LabelValueBean[5];
	private String selected = "";


	@Override
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		
		list[0] = new LabelValueBean("Test","test");
		list[1] = new LabelValueBean("Test1","test1");
		list[2] = new LabelValueBean("Test2","test2");
		list[3] = new LabelValueBean("Test3","test3");
		list[4] = new LabelValueBean("Test4","test4");
		
		
	}
	
	
	@Override
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		// TODO Auto-generated method stub
		return super.validate(mapping, request);
	}


	public LabelValueBean[] getList() {
		return list;
	}


	public void setList(LabelValueBean[] list) {
		this.list = list;
	}


	public String getSelected() {
		return selected;
	}


	public void setSelected(String selected) {
		this.selected = selected;
	}


	public String getSelectedListItem() {
		return selectedListItem;
	}


	public void setSelectedListItem(String selectedListItem) {
		this.selectedListItem = selectedListItem;
	}
	
}
 
Hallo dajos7
dajos7 hat gesagt.:
Normal muss man den User zum auswählen Zwingen, was man wie schon erwähnt mit einem leeren Feld erreicht. Ist das so schlimm, wenn da steht "Bitte wählen"?
[/code]
Nein ist nicht so schlimm aber wie ich sagte ich finde es nicht schön.
Wenn keine andre Lösung gibt dann mache ich einfach so.

Danke noch mal
 
Vlt geht aber auch das hier ?

Ich habe es mal nur auf das Javascript beschränkt. Wenn Du einfach die size erhöhst? Dann sind die Elemente immer angezeigt und es ist nichts vorausgewählt. wenn man dann ein Element auswählt, führt er das javascript immer aus auch beim ersten mal. Ok es ist keine Combobox mehr, aber es geht 🙂

Code:
<html>
<head>
<title></title>
</head>
<body>

<select id="select" size=6  onchange="javascript:alert(''+document.getElementById('select').options[document.getElementById('select').selectedIndex].value);">
<option value="1">lala</option>
<option value="2">lala2</option>
<option value="3">lala3</option>
<option value="4">lala4</option>
</select>


</body>

</html>
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben