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