Я изучаю Spring, и у меня проблема с отображением URL, когда я хочу удалить данные из таблицы.Я не понимаю, какой URL я должен напечатать, чтобы перенаправить меня к моей таблице снова.Его легко удалить из несвязанной таблицы, потому что отображение URL будет похоже на ("/charList")
, но в связанной таблице я должен быть перенаправлен на отображение как return "notebook/chract/{id}";
.Но он перенаправляет меня на ID того, что было удалено, и это ошибка.Я действительно не знаю, как правильно объяснить это по-английски, потому что я не являюсь носителем языка.Я надеюсь, вы понимаете мою проблему.Ниже приведены некоторые классы:
@Controller
public class TabCharsController {
final private TabRepository tabRepository;
final private TabCharsRepository tabCharsRepository;
final private ElectronicCharsNameRepository electronicCharsNameRepository;
final private ElectronicCharsValueRepository electronicCharsValueRepository;
public TabCharsController(TabRepository tabRepository,
TabCharsRepository tabCharsRepository,
ElectronicCharsNameRepository electronicCharsNameRepository,
ElectronicCharsValueRepository electronicCharsValueRepository) {
this.tabRepository = tabRepository;
this.tabCharsRepository = tabCharsRepository;
this.electronicCharsNameRepository = electronicCharsNameRepository;
this.electronicCharsValueRepository = electronicCharsValueRepository;
}
@GetMapping("tab/{id}/characts")
public String tabCharList(@PathVariable Long id, Model model) throws
Exception{
Tab tab = tabRepository.findById(id).orElseThrow(() -> new
Exception("PostId " + id + " not found"));
List<ElectronicCharactsName> elCharList =
electronicCharsNameRepository.findAll();
List<ElectronicCharactsValue> elCharValueList =
electronicCharsValueRepository.findAll();
List<TabChars> tabChars = tab.getCharacts();
model.addAttribute("model", tab.getModel());
model.addAttribute("tabChars", tabChars);
model.addAttribute("elCharList", elCharList);
model.addAttribute("elCharValueList", elCharValueList);
return "tab/tabCharList";
}
@GetMapping("/tab/characts/{id}/delete")
public String deleteTab(@PathVariable("id") TabChars tabChars){
tabCharsRepository.delete(tabChars);
return "redirect:/tab/{id}/characts"; //THIS REDIRECT IS INCORRECT
}
Модель:
@Entity
@Table(name = "tabChars")
public class TabChars {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String value;
@ManyToOne
@JoinColumn(name = "tab_id")
private Tab tab;
public TabChars() {
}
public TabChars(String name, String value, Tab tab) {
this.name = name;
this.value = value;
this.tab = tab;
}
public Tab getTab() {
return tab;
}
public void setTab(Tab tab) {
this.tab = tab;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
Вид:
<#import "../parts/common.ftl" as c>
<@c.page>
<h3>${model}</h3>
<div class="col-3" id="add_form">
<form method="post" action="/tab/${id}/characts">
<div class="form-group">
<select name="name" class="form-control">
<#list elCharList as elect>
<option>${elect.charName}</option>
</#list>
</select>
</div>
<div class="form-group">
<select name="value" class="form-control">
<#list elCharValueList as elect>
<option>${elect.charValue}</option>
</#list>
</select>
</div>
<input type="hidden" name="id" value="${id}" class="form-control">
<input type="hidden" name="_csrf" value="${_csrf.token}">
<button type="submit" class="btn btn-primary form-control">Add</button>
</form>
</div>
<div>
<table class="table">
<thead class="thead-dark">
<tr>
<th>Name</th>
<th>Value</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</thead>
<#list tabChars as char>
<tr>
<td>${char.name}</td>
<td>${char.value}</td>
<td><a href="/tabCharact/${char.id}">Edit</a></td>
<td><a href="/tab/characts/${char.id}/delete">Delete</a></td> //HERE
</tr>
</#list>
</table>
</div>
</@c.page>
Итак, что я должен набрать в методе TabCharsController deleteTab в RETURN?