【发布时间】:2021-09-23 23:21:36
【问题描述】:
我需要从表单的实体(表)属性填充下拉列表映射。由于这些值是静态的(只有 6 个值沿插入值重复),我认为获取这些值的列表并将其发送到 Controller 类并作为带有 Thymeleaf 的 Select 按钮映射到视图中可能是个好主意。
我知道我可以直接从实体中获取属性“状态”值,但我不知道最好的方法
所以,我的问题是:
是否可以从 jpql 查询中填充选择下拉按钮?还有其他更好的方法来填充唯一实体属性吗?
我尝试创建一个像下一个查询一样的查询,以从属于名为“Orders”的实体的属性“Status”获取唯一值,但此查询生成一个没有关联 ID 的列表,只有唯一值(也我想用一个新的临时自动增量 id 列创建一个查询,但没有成功)。
这是我的实体:
@Data
@Entity
@Table(name="orders")
public class Orders implements Serializable {
@Id
private Integer orderNumber;
@Column
private String orderDate;
@Column
private String requiredDate;
@Column
private String shippedDate;
@Column
private String status;
// ...
}
@Repository("ordersDAO")
public interface OrdersDAO extends JpaRepository<Orders,Integer>{
@Query("SELECT DISTINCT o.status FROM orders o")
//
@Transactional(readOnly = true)
public List <Orders> getAllStatus();
从现在开始,我无法解决(无论是控制器还是表单模板)。
更新
我正在尝试这段代码,但它不起作用。让我知道需要改进的错误:
服务实施
public class OrdersServiceImpl implements OrdersService{
@Override
public List<Orders> getAllStatus() {
return ordersDAO.getAllStatus();
}
}
控制器
@Controller
@Slf4j
public class IndexController {
String url = "";
@Autowired
@Qualifier("ordersServiceImpl")
private OrdersService ordersService;
@GetMapping("/")
public String getStatusDropdown(Model model){
List<Orders> statusDropdown = ordersService.getAllStatus();
model.addAttribute("statusDropdown", statusDropdown);
return "forms";
}
HTML 表单
<div class="form-row align-items-center">
<div th:object="${statusDropdown}" class="col-2 my-1">
<label for="Estado" class="mr-sm-2">Estado</label>
<select class="custom-select mr-sm-2" id="Estado" form="ordersForm">
<option selected>Seleccione Estado</option>
<option th:each="status : ${statusDropdown}" th:text="${status}" th:value="${status}">Estado 1</option>
</select>
</div>
<div class="col align-self-end my-1">
<input class="btn btn-info" type="submit" value="Buscar" th:href="@{/getOrdersByStatus}">
</div>
</div>
【问题讨论】:
标签: java spring-boot spring-mvc thymeleaf