我正在開發一個使用struts 2框架的web應用程序,並且我正在面對jsp中選擇標記的問題。 選擇標籤似乎工作正常,但只要按下提交按鈕,我的操作就無法從選擇中獲取數據。 我已經找了關於選擇的問題,但他們都似乎與列表有關。 在我的情況下,列表顯示正常。所以,我很迷茫,我不知道該怎麼做。我的行動無法從struts2選擇標記獲取數據
這是我的jsp代碼和我的動作代碼。當我按提交時,它假設表單將被髮送到我的操作中,並且我將從表單中獲取數據,但是當我打印數據時總是爲空。
JSP代碼:
<s:form action="borrarCita" method="post">
<s:select id="idCita" name="idCita" list="pendings" listKey="idCita" listValue="fecha" label="Elija una cita a anular"></s:select>
<s:submit value="Aceptar"/>
</s:form>
動作代碼:
public class CitasAction extends ActionSupport implements SessionAware{
private static final long serialVersionUID = 1L;
private Map session = ActionContext.getContext().getSession();
private List pendings= new ArrayList<Cita>();
private String idCita;
private String desplegarCitasPendientes;
private String pedirCita;
private String consultarCitas;
private String citaAnulada;
public String execute(){
return SUCCESS;
}
public String pedirCita(){
setCitaAnulada("");
setDesplegarCitasPendientes("");
setConsultarCitas("");
DbService db = (DbService)session.get("db");
Paciente paciente = (Paciente)session.get("Paciente");
List listaMedicos = db.getListaMedicos();
session.remove("listaCitas");
session.put("listaMedicos", listaMedicos);
setPedirCita("ok");
return SUCCESS;
}
public String desplegarCitasPendientes(){
setCitaAnulada("");
setPedirCita("");
setConsultarCitas("");
Paciente pac = (Paciente)session.get("user");
Iterator<Cita> nombreIterator = pac.getCitas().iterator();
while(nombreIterator.hasNext()){
Cita primera = nombreIterator.next();
if(primera.getStatus().equals("Pending")){
getPendings().add(primera);
}
}
setDesplegarCitasPendientes("ok");
return SUCCESS;
}
public String borrarCita(){
setConsultarCitas("");
setPedirCita("");
setDesplegarCitasPendientes("");
System.out.println(getIdCita());
System.out.println(ActionContext.getContext().getParameters().toString());
Paciente pac = (Paciente)session.get("user");
/*
Iterator<Cita> iterator = pac.getCitas().iterator();
while(iterator.hasNext()){
Cita primera = iterator.next();
if(primera.getFecha().equals(getFecha())){
iterator.remove();
break;
}
}
pac.setCitas(getPendings());
pac.getCitas().remove(getCitaSeleccionada());
session.put("user", pac);
DbService db = (DbService)session.get("db");
db.uploadPaciente(pac);*/
setCitaAnulada("ok");
return SUCCESS;
}
public String consultarCitas(){
setPedirCita("");
setDesplegarCitasPendientes("");
setCitaAnulada("");
setConsultarCitas("ok");
return SUCCESS;
}
public Map getSession() {
return session;
}
public void setSession(Map session) {
this.session = session;
}
public List getPendings() {
return pendings;
}
public void setPendings(List pendings) {
this.pendings = pendings;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public String getDesplegarCitasPendientes() {
return desplegarCitasPendientes;
}
public void setDesplegarCitasPendientes(String desplegarCitasPendientes) {
this.desplegarCitasPendientes = desplegarCitasPendientes;
}
public String getPedirCita() {
return pedirCita;
}
public void setPedirCita(String pedirCita) {
this.pedirCita = pedirCita;
}
public String getConsultarCitas() {
return consultarCitas;
}
public void setConsultarCitas(String consultarCitas) {
this.consultarCitas = consultarCitas;
}
public String getCitaAnulada() {
return citaAnulada;
}
public void setCitaAnulada(String citaAnulada) {
this.citaAnulada = citaAnulada;
}
public String getIdCita() {
return idCita;
}
public void setIdCita(String idCita) {
this.idCita = idCita;
}
}
所以,總結起來,我有一個JSP選擇標籤和當按下提交,動作沒有按」從選擇中獲取任何數據。
我希望有人能幫助我,因爲這讓我發瘋。 如果您需要更多信息,請告訴我,我會盡快將其發佈。
在此先感謝。
編輯:
以下是Cita.class代碼的一部分。它還有每個屬性的setter和getters。
public class Cita implements Serializable{
@Id @GeneratedValue
@Column(name="CITA_ID")
private int idCita;
@Column(name="FECHA")
@Temporal(TemporalType.DATE)
private Date fecha;
@Column(name="HORA")
@Temporal(TemporalType.TIME)
private Date hora;
@Column(name="ESTADO")
private String status;
@Column(name="ESPECIALIDAD")
private String especialidad;
@ManyToOne
@JoinColumn(name="MEDICO_ID")
private Medico medico;
@ManyToOne
@JoinColumn(name="PACIENTE_ID")
private Paciente paciente;
這裏是struts.xml中:
<interceptors>
<interceptor name="logger" class="interceptor.LoginInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="logger"/>
</interceptor-stack>
</interceptors>
<action name="desplegarCitasPendientes" class="action.CitasAction" method="desplegarCitasPendientes">
<interceptor-ref name="myStack"/>
<result name="success">/citas.jsp</result>
<result name="login" type="redirect">/index.jsp</result>
<result name="input">/index.jsp</result>
</action>
<action name="borrarCita" class="action.CitasAction" method="borrarCita">
<interceptor-ref name="myStack"/>
<result name="success">/citas.jsp</result>
<result name="login" type="redirect">/index.jsp</result>
<result name="input">/index.jsp</result>
</action>
@Jeroen,很抱歉的代碼龐大的牆。這是我在這裏的第一篇文章。
@Roman,我希望這有助於你幫我:-)
感謝您的答覆傢伙。
編輯2:
這裏是我的LoginInterceptor:
public class LoginInterceptor extends AbstractInterceptor {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String intercept(final ActionInvocation invocation) throws Exception {
Map<String, Object> session = invocation.getInvocationContext().getSession();
// sb: if the user is already signed-in, then let the request through.
if (session.get("user") != null) {
return invocation.invoke();
}else{
System.out.println("redirect");
return "login";
}
}
}
如果您需要別的東西,讓我知道:-)
請發佈一個簡短的代碼示例,演示問題而不是巨大的文本牆。 –
發佈'struts.xml'和'Cita'類。 –
@ user2712493你有其他的數據元素在jsp .. ?? – Dileep