2012-11-25 3 views
3

줄무늬 프레임 워크를 사용하고 있으며 해결할 수없는 문제가 있습니다.줄무늬 제출 단추 이벤트를 무시합니다.

"생물"(내 모델의 일부 엔티티)을 DB에 추가하는 "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> 

그래서 그게 꽤있다, 나는 또한 그 자체를 형성 포함

add.jsp 나는 이름의 제출 버튼이있는 액션 빈에서 메소드 "create"를 매핑해야합니까?

좋아 I은 다음과 같습니다 클래스가 있도록 :

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

그래서 그것은 이름으로 제출이있는 경우 해당 작업 빈의 생성 방법을 실행, "생성"을 의미하고 creatureDTO입니다 저장되었습니다.

하지만

액션 빈에서 "만드는"방법은 전혀 실행되지 않도록하고 내가

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

응용 프로그램 컨텍스트라는 페이지로 이동하고는 pa165과로 리디렉션 후 그 페이지에서 submit 버튼을 클릭하면 그 디렉토리에있는 모든 파일들의리스트 (add.jsp와 그 안에, creature dir의 모든 파일들)가 보이고, 메쏘드가 전혀 실행되지 않습니다..

나는 그것이 작동하지 않는 이유는이

모든 방법 throught를 리디렉션되는 것을 의미합니다 I 라인

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

에 의해 처리 페이지 생물/show.jsp로 리디렉션 할

?

답변

2

어디에서나 유효성 검사 결과를 출력합니까? (< 줄무늬 : 오류 > 태그) 'create'메소드가 전혀 실행되지 않으면 양식 제출이 유효성 검사를 통과하지 못한다는 것을 나타낼 수 있습니다. 어쩌면 필드 이름이 일치하지 않거나 비슷한 것일 수 있습니다.

1

문제는 URL 바인딩이 폴더 구조와 같지 않아야한다는 것입니다. 바인딩을 예를 들어 @UrlBinding("/mycreatures/{$event}")과 같이 변경하면됩니다. 나는 똑같은 문제가 있었는데 이것은 매력처럼 일했다. 자세한 내용은 this link을 참조하십시오.