我正在尝试使用Spring Boot和数据库。
所以我有2个具有public interface IStartable {void Start();bool IsRunning{get;}}
public interface IStoppable {void Stop();bool IsRunning{get;}}
public interface IBatchJob: INamable, IStartable, IStoppable {}
public class BatchJob: IBatchJob
{
public string Name {get; private set;}
public bool IsRunning {get; private set;}
public BatchJob(string name) {Name = name;}
public void Start() {IsRunning = true;}
public void Stop() {IsRunning = false;}
}
public class AutoStopBatchJob: BatchJob
{
System.Timers.Timer batchTimer;
public AutoStopBatchJob(string name, TimeSpan maxRunTime): base (name)
{
batchTimer = new System.Timers.Timer();
batchTimer.AutoReset = false;
batchTimer.Interval = maxRunTime.TotalMilliseconds;
batchTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
}
public override void Start()
{
base.Start();
batchTimer.Start();
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
Stop();
}
}
[TestClass]
public abstract class IStartableTests
{
protected abstract IStartable CreateInstance();
[TestMethod]
public void StartSetsRunningToTrue()
{
var instance = CreateInstance();
Assert.AreEqual(false, instance.IsRunning);
instance.Start();
Assert.AreEqual(true, instance.IsRunning);
}
}
[TestClass]
public abstract class IBatchJobTests: INamableTests
{
public abstract IBatchJob CreateInstance(string name);
//I've extended INamablTests, so those will get run.
//However, how should I test IStartable and IStoppable?
}
[TestClass]
public class BatchJobTests: IBatchJobTests
{
public static BatchJob CreateInstance(string name) => new BatchJob(name);
public IBatchJob CreateInstance(string name) => BatchJobTests.CreateInstance(name);
//do I have to implement nested classes for these interfaces for every derived class?
[TestClass]
public class BaseClassIStartableTests : IStartableTests
{
protected IStartable CreateInstance() => BatchJobTests.CreateInstance("Default Name");
}
[TestClass]
public class BaseClassIStoppableTests : IStoppableTests
{
protected IStoppable CreateInstance() => BatchJobTests.CreateInstance("Default Name", initialRunningState:=true);
}
}
关系的实体:
@OneToMany
第二个:
@Entity
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int teamId;
@Column
private String teamTitle;
@Column
private String teamCity;
@ManyToOne
@JoinColumn(name = "conferenceId", nullable = false)
private Conference teamConference;
public Team() { super(); }
//some getters and setters
}
Jsp页面:
@Entity
public class Conference {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int conferenceId;
private String conferenceTitle;
@OneToMany(mappedBy = "teamId")
private List<Team> conferenceTeams;
public Conference() {
super();
}
//some getters and setters
}
和控制器类:
<body>
<form:form method="post" modelAttribute="team">
<div>
<form:label path="teamTitle">Title</form:label>
<form:input path="teamTitle" type="text"/>
<form:label path="teamCity">City</form:label>
<form:input path="teamCity" type="text"/>
//DAHELL IS HERE
<div class="form-group">
<label for="conferenceList">Select conference:</label>
<select class="form-control" id="conferenceList">
<c:forEach items="${conference}" var="conf">
<option>${conf.conferenceTitle}</option>
</c:forEach>
</select>
</div>
<button type="submit" class="btn btn-success">Add</button>
</div>
</form:form>
// jquery etc
</body>
ConferenceDAO和TeamDAO只是从JpaRepository扩展的接口。
所以我想了解的是如何添加新的@Controller
public class TeamsController {
@Autowired
private TeamDAO teamDAO;
@Autowired
private ConferenceDAO conferenceDAO;
@RequestMapping(value = "/schedule", method = RequestMethod.GET)
public String showSchedule(ModelMap model) {
model.put("conferences", conferenceDAO.findAll());
model.put("teams", teamDAO.findAll());
return "schedule";
}
@RequestMapping(value = "/new-team", method = RequestMethod.GET)
public String addNewTeam(ModelMap model) {
model.addAttribute("conference", conferenceDAO.findAll());
model.addAttribute("team", new Team());
return "new-team";
}
@RequestMapping(value = "/new-team", method = RequestMethod.POST)
public String addTeam(ModelMap model, Team newTeam) {
teamDAO.save(newTeam);
return "redirect:/schedule";
}
}
。我在Team
页上插入标题和城市,还应该选择该团队所属的会议。但是当我按下jsp
按钮时,我得到了
add
我在做什么错?我相信There was an unexpected error (type=Internal Server Error, status=500).
No message available
页面中包含selecting
部分的内容。而且我100%肯定我在jsp
类中遗漏了一些东西。我应该以某种方式将新团队保存到数据库中,并且Controller
列还应显示它包含此新团队。
如果您向我展示挖掘方式,我将非常感谢。
答案 0 :(得分:0)
是的,评论确实很有帮助。因此,对于那些阅读它的人来说,请先沉迷于问题并阅读日志,然后再提出愚蠢的问题(就像我:D一样)
问题出在 Undefined symbols for architecture x86_64:
"_ASN1_INTEGER_set", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
"_EVP_PKEY_free", referenced from:
routine1(void*) in CA-ceff6a.o
"_EVP_sha1", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
"_PEM_write_PrivateKey", referenced from:
write_to_disk(evp_pkey_st*, x509_st*) in CA-ceff6a.o
"_PEM_write_X509", referenced from:
write_to_disk(evp_pkey_st*, x509_st*) in CA-ceff6a.o
"_X509_NAME_add_entry_by_txt", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
"_X509_free", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
routine1(void*) in CA-ceff6a.o
"_X509_get_serialNumber", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
"_X509_get_subject_name", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
"_X509_gmtime_adj", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
"_X509_new", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
"_X509_set_issuer_name", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
"_X509_set_pubkey", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
"_X509_sign", referenced from:
generate_x509(evp_pkey_st*) in CA-ceff6a.o
ld: symbol(s) not found for architecture x86_64
页和jsp
表格内。我得到selection
的{{1}},如果我要阅读日志,我会知道的。
因此,有关检查整个堆栈跟踪并更改Null
选择部分的评论对我有用。
固定的conferenceId
选择是:
jsp
谢谢!