3

我正在使用 Stripes 框架,但我遇到了一个无法解决的问题。

我在文件夹“creatures”中有一个名为“add.jsp”的页面,它将一个生物(我的模型中的某个实体)添加到数据库中。我在该页面中使用此表单:

添加.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 方法并保存 creativeDTO 等等。

操作 bean 中的“创建”方法根本没有执行,我被重定向到名为的页面

http://localhost:8080/pa165/creatures/

应用程序上下文是 pa165,在单击提交按钮后重定向到该页面后,我看到该目录中所有文件的列表(add.jsp 等,生物目录中的所有文件)并且该方法根本不执行.

我想被重定向到我按行处理的页面生物/show.jsp

return new RedirectResolution(this.getClass(), "all");

这意味着我将通过那里的所有方法重定向

为什么它不起作用?

4

2 回答 2

2

您是否在任何地方输出验证结果?(<stripes:errors> 标签) 'create' 方法根本没有被执行可能表明表单提交没有通过验证。也许字段名称不匹配或类似的东西。

于 2012-11-26T09:37:48.210 回答
1

您的问题是 URL 绑定不应与文件夹结构相同。只需将绑定更改为@UrlBinding("/mycreatures/{$event}"). 我有同样的问题,这就像一个魅力。有关更多信息,请参阅此链接

于 2013-12-23T12:36:54.520 回答