默认情况下,OpenXava 使用相同的视图来创建新实体和更新现有实体。有没有办法对每种情况有不同的看法?
问问题
63 次
1 回答
0
显然,您必须定义一个用于创建的视图和另一个用于更新的视图,因此:
@View(name="Create", members=" ... ")
@View(name="Update", members=" ... ")
public class MyEntity { ...
现在您必须细化用于选择 Create 视图的新操作和用于选择 Update 视图的搜索操作。首先,在您的 controllers.xml 中定义您自己的控制器,因此:
<controller name="MyTypical">
<extends controller="Typical"/>
<action name="new"
class="com.mycompany.myapplication.actions.MyNewAction"
image="new.gif"
icon="library-plus"
keystroke="Control N"
loses-changed-data="true">
<set property="restoreModel" value="true"/>
</action>
<action name="search" hidden="true"
class="com.mycompany.myapplication.actions.MySearchAction"/>
</controller>
现在将此控制器分配给您的模块,并为模块定义搜索操作。以这种方式在 application.xml 中编写您的模块:
<module name="MyModule">
<env-var name="XAVA_SEARCH_ACTION" value="MyTypical.search"/>
<model name="MyEntity"/>
<controller name="MyTypical"/>
</module>
现在只剩下完善你的行动逻辑了。对于您编写的 MySearchAction (注意:必须捕获选定的实体索引值 (1) 以便在 setViewName(...) 方法 (2) 执行重置后恢复 (3)):
public class MySearchAction extends SearchByViewKeyAction {
public void execute() throws Exception {
Map mapIndexValues = getView().getKeyValuesWithValue(); //1
getView().setViewName("Update"); //2
getView().setValues(mapIndexValues); //3
super.execute();
}
}
对于 MyNewAction:
public class MyNewAction extends NewAction {
public void execute() throws Exception {
getView().setViewName("Create");
super.execute();
}
}
于 2021-03-30T17:50:46.780 回答