我在使用 rest 插件时遇到了 struts2 的奇怪行为。奇怪,因为在我已经完成的 Web 应用程序中,一切正常。
好吧,我有一个带有帖子表单的弹出式 jsp。此表单操作 url 正确调用了控制器的 create 方法。
<form name="gestioneUtenteForm" action="../credenziali" method="post">
<input type="hidden" name="idModifica" id="idUtente" value="<%=request.getParameter("idModifica") %>" />
<div>
<label>Nome Completo</label>
<input type="text" name="nomeUtente" id="nomeUtente" />
</div>
<div>
<label>Login</label>
<input type="text" name="loginUtente" id="loginUtente" />
</div>
<div>
<label>Password</label>
<input type="password" name="password" id="password" />
</div>
<div>
<label>Conferma Password</label>
<input type="password" name="confermaPassword" id="confermaPassword" />
</div>
<!-- ... OTHER FIELDS ... -->
<div><input type="submit" name="submit" value="Registra" /></div>
</form>
我的问题是,并非控制器的所有属性值都是从 post 的参数设置的。我的意思是,通过 firebug,我看到所有参数都已发布,如果我通过 request.getParameter("something") 之类的调用将它们放入控制器中,我将获得所有值。如果我尝试使用它们的 getter 从控制器的属性中获取参数,我会得到正确的东西,但会得到其他带有空值的东西。在具体:
private String nomeUtente;
private String loginUtente;
private String password;
... Other Properties ....
public String getNomeUtente() {
return nomeUtente;
}
public void setNomeUtente(String nomeUtente) {
this.nomeUtente = nomeUtente;
}
public String getLoginUtente() {
return loginUtente;
}
public void setLoginUtente(String loginUtente) {
this.loginUtente = loginUtente;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
... Other Setters & Getters ...
public HttpHeaders create() {
GestioneUtenteService.creaUtente(nomeUtente, loginUtente, password,
mailUtente, telUtente, scadenzaReg, scadenzaPwd, ruoloUtente);
if (Integer.valueOf(ruoloUtente) == Constants.NUM_RUOLO_ADMIN_GENERALE)
return new DefaultHttpHeaders("accesso").disableCaching();
return index();
}
我认为 loginUtente 具有正确的值,就像其他属性一样。但是... nomeUtente 和密码为空。如果我打电话:
public HttpHeaders create() {
HttpServletRequest request = getServletRequest();
nomeUtente = request.getParameter("nomeUtente");
loginUtente = request.getParameter("loginUtente");
password = request.getParameter("password");
mailUtente = request.getParameter("mailUtente");
telUtente = request.getParameter("telUtente");
scadenzaReg = request.getParameter("scadenzaReg");
scadenzaPwd = request.getParameter("scadenzaPwd");
ruoloUtente = request.getParameter("ruoloUtente");
logger.info("Creazione utente");
GestioneUtenteService.creaUtente(nomeUtente, loginUtente, password,
mailUtente, telUtente, scadenzaReg, scadenzaPwd, ruoloUtente);
if (Integer.valueOf(ruoloUtente) == Constants.NUM_RUOLO_ADMIN_GENERALE)
return new DefaultHttpHeaders("accesso").disableCaching();
return index();
}
正如我之前所说,我得到了所有的价值......nomeUtente 和密码包括在内,因为一切都在发布。再次使用 Web 应用程序,一切正常,并且控制器的属性都已正确设置。
问题出在哪里?