Stripes игнорирует событие кнопки отправки

Я использую Stripes Framework, и у меня есть проблема, которую я просто не могу решить.

У меня есть страница в папке "существа" под названием "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>

так что это здорово, я также включаю саму форму и у меня есть кнопка отправки с именем = "создать", которая должна отображаться в методе "создать" в действии, верно?

Итак, у меня есть тот класс, который выглядит так:

@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");
}

Таким образом, это означает, что когда существует submit с именем "create", в этом бине действия выполняется метод create, а creatureDTO сохраняется и так далее.

НО

Этот метод "создания" в бине действия вообще не выполняется, и я перенаправлен на страницу с именем

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

Контекст приложения - pa165, и после перенаправления на эту страницу после нажатия кнопки "Отправить" я вижу список всех файлов в этом каталоге (add.jsp и т. Д., Все файлы в каталоге существ), и этот метод вообще не выполняется,

Я хочу, чтобы меня перенаправили на страницу creatures/show.jsp, которую я обрабатываю построчно

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

это означает, что я буду перенаправлен через весь метод там

Почему это не работает?

2 ответа

Вы выводите результаты проверки в любом месте? (тег) Метод 'create', который вообще не выполняется, может указывать, что отправка форм не проходит проверку. Возможно имя поля не совпадает или что-то в этом роде.

Ваша проблема в том, что привязка URL не должна совпадать со структурой папки. Просто измените привязку на что-то вроде @UrlBinding("/mycreatures/{$event}"), У меня была та же самая проблема, и это работало как очарование. Смотрите эту ссылку для получения дополнительной информации.

Другие вопросы по тегам