Spring MVC中ModelAndView传List<User>到JSP仅显示部分属性
问题本质
- EL表达式
${usr}输出对象时,会自动调用对象的toString()方法完成字符串转换,不会自动遍历输出类的所有属性。 - 你当前的User类重写的
toString()方法仅手动拼接了部分字段,缺失了contrasenia、intento_fallido、intranet_token_codigo、intranet_token_fecha、tesoreria_token_codigo、tesoreria_token_fecha等字段,这就是页面上只能看到部分属性的直接原因。
解决方案
方案1:补全toString()方法
把所有遗漏的字段补充到toString()的拼接逻辑中,修改后的示例如下:
@Override public String toString() { return "Id:" + id + ", Perfil:" + perfil.getNombre() + ", Id_Perfil:" + perfil.getId() + ", Nombre:" + nombre + ", Usuario:" + usuario + ", Contrasenia:" + contrasenia + ", Correo:" + correo + ", Teléfono:" + telefono + ", Image_Perfil:" + imagen_perfil + ", Intento_Fallido:" + intento_fallido + ", Intranet_Id:" + intranet_id + ", Intranet_Notaria:" + intranet_notaria + ", Intranet_Token_Codigo:" + intranet_token_codigo + ", Intranet_Token_Fecha:" + intranet_token_fecha + ", Tesoreria_Token_Codigo:" + tesoreria_token_codigo + ", Tesoreria_Token_Fecha:" + tesoreria_token_fecha + ", Activo:" + activo; }
修改完成后,原有JSP代码不需要调整,输出内容就会包含所有字段。
方案2:JSP页面单独访问字段值(更推荐)
不直接输出整个User对象,通过EL表达式逐个调用对应getter方法取值展示,完全不受toString()方法逻辑的影响,示例JSP代码:
<c:forEach items="${Users}" var="usr"> 用户ID:${usr.id} <br> 所属角色:${usr.perfil.nombre} <br> 姓名:${usr.nombre} <br> 登录账号:${usr.usuario} <br> 登录密码:${usr.contrasenia} <br> 邮箱:${usr.correo} <br> 联系电话:${usr.telefono} <br> 头像路径:${usr.imagenPerfil} <br> 连续登录失败次数:${usr.intentoFallido} <br> 内网关联ID:${usr.intranetId} <br> 内网所属公证处:${usr.intranetNotaria} <br> 内网校验Token:${usr.intranetTokenCodigo} <br> 内网Token生成时间:${usr.intranetTokenFecha} <br> 财务系统校验Token:${usr.tesoreriaTokenCodigo} <br> 财务系统Token生成时间:${usr.tesoreriaTokenFecha} <br> 账号状态:${usr.activo} <br> <hr> </c:forEach>
注意:User类中包含账号密码这类敏感字段,页面直接明文输出存在信息安全风险,实际业务场景中建议对密码字段做脱敏处理,不要在前端展示明文。
内容的提问来源于stack exchange,提问作者Blue Tomato
相关产品推荐
相关产品推荐

