我正在使用Stripes框架,我遇到了一个我无法解决的问题。
我在“生物”文件夹中有一个名为“add.jsp”的页面,它将一个生物(我模型中的某个实体)添加到数据库中。我在该页面中使用此表单:
add.jsp
<s:layout-render name="/layout.jsp" title="Creatures">
<s:layout-component name="menu">
<ul class="navcontainer" id="main-navigation">
<li><s:link href="/regions.jsp">Region</s:link></li>
<li class="current"><s:link href="/creatures/show.jsp">Creatures</s:link></li>
<li><s:link href="/types.jsp">Creature types</s:link></li>
<li><s:link href="/weapons.jsp">Weapons</s:link></li>
</ul>
</s:layout-component>
<s:layout-component name="main_content">
<div class="main-content">
<div class="content">
<img src="../images/banner.png" alt="Banner" id="banner"/>
<h1>Create a new creature</h1>
<s:link href="/creatures/show.jsp">Back</s:link>
<s:form beanclass="cz.muni.fi.pa165.creatures.web.CreaturesActionBean">
<%@include file="/forms/createCreature.jsp"%>
<s:submit name="create" value="Create"/>
</s:form>
</div>
</div>
</s:layout-component>
所以这很漂亮,我还包括表单本身,我有一个name =“create”的提交按钮,它应该映射到action bean中的方法“create”吗?
好的,所以我的课程看起来像这样:
@UrlBinding("/creatures/{$event}")
public class CreaturesActionBean implements ActionBean {
final static Logger logger =
Logger.getLogger(CreaturesActionBean.class.getName());
private ActionBeanContext context;
@SpringBean
protected CreatureService creatureService;
@ValidateNestedProperties(value = {
@Validate(on = {"create"}, field = "name", required = true, maxlength=256),
@Validate(converter=LongTypeConverter.class , on = {"create"},
field = "weight", required = false, minvalue=1, maxvalue=1000),
@Validate(converter=LongTypeConverter.class , on = {"create"},
field = "height", required = false, minvalue=1, maxvalue=1000)
})
private CreatureDTO creatureDTO;
public void setCreatureDTO(CreatureDTO creatureDTO) {
this.creatureDTO = creatureDTO;
}
public CreatureDTO getCreatureDTO() {
return this.creatureDTO;
}
public Resolution create() {
logger.log(Level.INFO, "add() creature={}", creatureDTO);
creatureService.create(creatureDTO);
return new RedirectResolution(this.getClass(), "all");
}
@DefaultHandler
public Resolution all() {
logger.log(Level.INFO, "getting all creatures");
return new ForwardResolution("/creatures/show.jsp");
}
所以这意味着当有一个名为“create”的提交时,在该操作bean中执行create方法并保存creatureDTO,依此类推。
BUT
动作bean中的“create”方法根本没有执行,我被重定向到名为的页面
http://localhost:8080/pa165/creatures/
应用程序上下文是pa165,在我点击提交按钮后重定向到该页面后,我看到该目录中所有文件的列表(add.jsp等等,生物目录中的所有文件)和方法根本没有执行。
我希望被重定向到我按行处理的页面creatures / show.jsp
return new RedirectResolution(this.getClass(), "all");
这意味着我将通过所有方法重定向
为什么它不起作用?
答案 0 :(得分:2)
您是否在任何地方输出验证结果? (&lt; stripes:errors&gt; tag)根本没有执行的'create'方法可能会建议表单提交不通过验证。也许字段名称不匹配或类似的东西。
答案 1 :(得分:1)
您的问题是URL绑定不应与文件夹结构相同。只需更改@UrlBinding("/mycreatures/{$event}")
之类的绑定即可。我有同样的问题,这就像一个魅力。有关详细信息,请参阅this link。