0
後綁定複選框我有步驟,以便註冊一個團隊順序如下:甚至無法註冊自定義屬性編輯器
- 選擇團隊 - 這將顯示該團隊爲複選框的球員名單(JSP下面的頁面)
- 用戶可以選擇一個或多個顯示的玩家
newdTeam
請求處理程序方法應該從上面的步驟2中設置選定的玩家。處理程序正在被調用,但即使我已經在步驟2中選擇了玩家,players
集也是空的。不知道問題出在哪裏。
我沒有看到屬性編輯器被調用。任何幫助表示讚賞。
隊
@NodeEntity
public class Team
{
@GraphId
private Long nodeId;
@GraphProperty
@Indexed (unique = true)
private String name;
@Fetch
@RelatedTo (type = "PLAYED_WITH_TEAM", direction = Direction.INCOMING)
private final Set<Player> players = new HashSet<Player>();
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = StringUtil.capitalizeFirstLetter(name);
}
public Long getNodeId()
{
return nodeId;
}
public Collection<Player> getPlayers()
{
return players;
}
public void setPlayers(Set<Player> plyrs)
{
System.err.println("called set plrs");
players.addAll(plyrs);
}
}
球員
@NodeEntity
public class Player
{
@GraphId
private Long nodeId;
@Indexed (unique = true)
private String name;
@GraphProperty
@Indexed
private String firstName;
@GraphProperty
private String email;
//getters and setters
}
控制器
@Controller
@RequestMapping ("/registration")
public class RegistrationController
{
private transient final Logger LOG = LoggerFactory.getLogger(getClass());
@Autowired
private LeagueRepository leagueRepo;
@Autowired
private TeamRepository teamRepo;
@RequestMapping (method = RequestMethod.GET)
public String get()
{
return "/registration/start";
}
@Transactional
@RequestMapping (value = "/start", method = RequestMethod.POST)
public String hasParticipatedEarlier(@RequestParam boolean participatedInEarlierLeague, Model model)
{
if (participatedInEarlierLeague)
{
LOG.debug("Participated in earlier leagues. Retrieving the past league teams.");
Iterable<League> allLeagues = leagueRepo.findAll();
Set<League> sortedLeagues = new TreeSet<League>();
for (League l: allLeagues)
{
sortedLeagues.add(l);
}
LOG.debug("Past leagues sorted by start date {}", sortedLeagues);
model.addAttribute("pastLeagues", sortedLeagues);
}
else
{
LOG.debug("Did not participate in earlier leagues. Redirecting to register the new one.");
}
return "/registration/leagues";
}
@RequestMapping (value = "/selectTeam", method = RequestMethod.POST)
public String selectTeam(@RequestParam Long selectedTeam, Model model)
{
LOG.debug("Participated as team {} in previous league", selectedTeam);
Team team = teamRepo.findOne(selectedTeam);
model.addAttribute("team", team);
model.addAttribute("players", team.getPlayers());
return "registration/players";
}
@RequestMapping (value = "/newTeam", method = RequestMethod.POST)
public String newdTeam(@ModelAttribute Team team, Model model)
{
LOG.debug("Selected players from existing list {}", team.getPlayers());
return "registration/registrationConfirmation";
}
@InitBinder
public void initBinder(WebDataBinder binder)
{
binder.registerCustomEditor(Player.class, new PlayerPropertyEditor());
}
}
FLASH播放器rPropertyEditor
public class PlayerPropertyEditor extends PropertyEditorSupport
{
@Autowired
PlayerRepository playerRepo;
@Override
public String getAsText()
{
System.err.println("get as txt");
return ((Player) getValue()).getNodeId().toString();
}
@Override
public void setAsText(String incomingId) throws IllegalArgumentException
{
System.err.println(incomingId);
Player player = playerRepo.findOne(Long.valueOf(incomingId));
setValue(player);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Players of ${team.name}</title>
</head>
<body>
<f:form action="newTeam" method="post" modelAttribute="team">
<f:checkboxes items="${players}" path="players" itemLabel="name" itemValue="nodeId" delimiter="<br/>"/>
<input type="submit" value="Submit">
</f:form>
</body>
</html>