问题描述
今天在做注册页面时,当username已经存在时,将用户之前写的数据(除了已经错误的用户名之外)回显的注册页面时
- 当时的代码是这样写的
<form method="post" th:action="@{/api/register}" id="register_form">
<table>
<tr>
<td>用户名称</td>
<td><input type="text" id="username" name="username" placeholder=" 输入用户名"></td>
<td><div class="tip" hidden="hidden">格式有误</div></td>
</tr>
<tr>
<td>用户密码</td>
<td><input type="password" name="password" id="password" placeholder=" 输入密码" th:value="${session.registerUser.password}"></td>
<td><div class="tip" hidden="hidden">格式有误</div></td>
</tr>
<tr>
<td>确认密码</td>
<td><input type="password" name="againPassword" id="againPsw" placeholder=" 确认密码" th:value="${session.registerUser.password}"></td>
<td><div class="tip" hidden="hidden">密码不符</div></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name" id="name" placeholder="您的姓名" th:value="${session.registerUser.name}"></td>
</tr>
<tr>
<td>性别</td>
<td>
<input type="radio" name="gender" class="sex" value="男" checked>男
<input type="radio" name="gender" class="sex" value="女">女
</td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age" id="age" placeholder="您的年龄" th:value="${session.registerUser.age}"></td>
</tr>
<tr>
<td>电子邮件</td>
<td><input type="text" name="email" id="email" placeholder=" 输入邮箱地址" th:value="${session.registerUser.email}"></td>
<td><div class="tip" hidden="hidden">格式有误</div></td>
</tr>
</table>
这时在第一次跳转到注册页面时遇到了问题,在包含第一个输入框的位置以后得页面代码均无法显示
问题分析
其实就是很小的问题啦,只是没有学Thymeleaf语法罢了
具体原因:引用了实体类对象的属性导致空指针异常,在Thymeleaf渲染模板时抛出空指针异常。这将中断模板的渲染,导致输入框以下的所有内容都无法加载。
解决方案
也很好解决,就不让为null就好了
有好几种解决方案,这里提供最简洁的解决方案
使用安全导航运算符:
在访问实体类对象的属性时,使用安全导航运算符 ?.
来避免空指针异常。这样,即使实体类对象为空,Thymeleaf仍然会继续进行模板的渲染而不会中断。
<input type="text" th:value="${session.entity?.name}" />
修改后的代码
<table>
<tr>
<td>用户名称</td>
<td><input type="text" id="username" name="username" placeholder=" 输入用户名"></td>
<td><div class="tip" hidden="hidden">格式有误</div></td>
</tr>
<tr>
<td>用户密码</td>
<td><input type="password" name="password" id="password" placeholder=" 输入密码" th:value="${session.registerUser?.password}"></td>
<td><div class="tip" hidden="hidden">格式有误</div></td>
</tr>
<tr>
<td>确认密码</td>
<td><input type="password" name="againPassword" id="againPsw" placeholder=" 确认密码" th:value="${session.registerUser?.password}"></td>
<td><div class="tip" hidden="hidden">密码不符</div></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name" id="name" placeholder="您的姓名" th:value="${session.registerUser?.name}"></td>
</tr>
<tr>
<td>性别</td>
<td>
<input type="radio" name="gender" class="sex" value="男" checked>男
<input type="radio" name="gender" class="sex" value="女">女
</td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age" id="age" placeholder="您的年龄" th:value="${session.registerUser?.age}"></td>
</tr>
<tr>
<td>电子邮件</td>
<td><input type="text" name="email" id="email" placeholder=" 输入邮箱地址" th:value="${session.registerUser?.email}"></td>
<td><div class="tip" hidden="hidden">格式有误</div></td>
</tr>
</table>
嘎嘎好使