gpt4 book ai didi

java - Struts2 中 ModelDriven Action 的继承

转载 作者:行者123 更新时间:2023-11-30 11:04:27 26 4
gpt4 key购买 nike

我正在尝试使用 Struts2 为我们的数据库构建一个基于 Web 的 GUI 工具。

我设法呈现并填充网络表单中的所有字段,但现在在将输入保存到数据库时遇到问题。

这里是问题的简化示例(当然这不是真正的代码,但足以理解困境:

动物.java:

public class Animal{
private final static long serialVersionUID = 2L;
protected String id;
protected String comment;
protected String name;
protected BaseAnimal subanimal;
protected Date undotted;

// All getters+setters also exist.
public String getAnimalType(){
return subanimal.getClass().getSimpleName();
}

猫.java:

public class Cat extends BaseAnimal{

private final static long serialVersionUID = 2L;
protected Gender gender;
protected int age;
protected Color color;
protected Voice voice;
//All getters+setters also exist
}

乌龟.java:

public class Turtle extends BaseAnimal{

private final static long serialVersionUID = 2L;
protected Gender gender;
protected int circlesOnBack;
protected int speed;
//All getters+setters also exist
}

DoAction.java:

public class DoItem extends ActionSupport implements ModelDriven<Animal>{
private static final long serialVersionUID = 2L;
protected String idForm;
protected Animal animal;

@Override
public String execute(){
if (idForm != null && !idForm.equals("")){
showAnimal(session); //loads animal from DB
}
return SUCCESS;
}

public void saveAnimal(Map<String,Object> session){
// Stuck here, help?
}
public Animal getModel() {
return animal;
}
public void setModel(Object animal) {
this.animal = (Animal) animal;
}
public String getIdForm() {
return idForm;
}
public void setIdForm(String idForm) {
this.idForm = idForm;
}
public Animal getAnimal() {
return animal;
}
public void setAnimal(Animal animal) {
this.animal = animal;
}
}

动物.jsp:

<%@ taglib prefix="s" uri="/struts-tags" %>    
<html>
<head></head>
<body>

<s:form method="post" theme="simple">
<table>
<tr>
<td><s:textfield key="name"/></td>
<td><s:textarea key="comment"/></td>

<td class='show4cat show4Turtle'>
<s:select key="animal.subanimal.gender" list='getMap("Gender")'/>
</td>
<td class='show4cat'>
<s:select key="animal.subanimal.color" list='getMap("Color")'/>
</td>

<td class='show4turtle'>
<s:select key="animal.subanimal.speed" list='%{#{'1':'Fast','2':'Ultra Fast'}}'/>
</td>
</tr>
<tr>
<td class='show4turtle'>
<s:submit action='saveTurtle' name='submitAnimal' value='save'/>
</td>
<td class='show4cat'>
<s:submit action='saveCat' name='submitAnimal' value='save'/>
</td>
</tr>
</table>
</s:form>
</body>
</html>

我现在想提交此表格并将动物保存到数据库中。如何管理此保存操作?我主要关心的是创建适当子类的对象。

注意:我无法更改数据模型设计!但可以更改 JSP 或操作类。

提前致谢!

最佳答案

你的两个<s:submit/>按钮针对两种不同的操作(您没有向我们展示)。

这就是你的情况下的开关。

针对两个 Action ,一个用海龟数据,另一个用猫数据,在execute()中做正确的操作每个 Action 的方法。由于用户选择了正确的按钮,调用的操作知道要保存哪只动物。

这个 Action 可以是同一个物理 Action 文件的两种不同方法,也可以是两个不同的 Action 文件,这取决于你,它也取决于你的 Action 中有多少必须执行的“共享”代码对于这两个 Action 。但在第一种情况下,这意味着同一个文件中有很多未使用的数据(例如,有 100 只动物,100 只动物的所有属性在一个 Action 中,但在保存时只使用一个),所以我会去用第二种方式。

您可以创建三个单独的操作,一个用于在保存动物之前之后显示页面(例如 ReadAnimal.java),还有两个用于保存动物的操作(例如. SaveTurtle.javaSaveCat.java ),最终使最后两个扩展第一个。 Read more on this answer .

最后的想法:

关于java - Struts2 中 ModelDriven Action 的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30016509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com