我在使用strut2进行学习,使用freeer作为view层的技术。我在编写一个简单的人员增加例子时,需要从数据库中获得目前科室的列表和准备其他数据后,action返回success,然后在配置文件中将result转向为ftl文件,都没有问题。但是当我输入信息不合法后,会自动进行类型转换,然后失败,会返回input执行结果,然后按照我的设定回执行我希望的action,但是我发现struts并不会执行我的action,而是直接调用我设置action中的结果input中的ftl,这样根本就不会调用准备数据的那一段代码,导致ftl的显示失败。 
struts.xml 
<action name="addPersonEntry" class="personAct" method="addPersonEntry">   
    <result name="input" type="freeer">/person/addPersonEntry.ftl</result>   
</action>   
  
<action name="addPerson" class="personAct" method="addPerson">   
    <result name="success" type="chain">listPerson</result>   
    <result name="input" type="chain">addPersonEntry</result>   
</action>  
action
public String addPersonEntry() {   
   //获得科室列表,给ftl文件准备数据   
   depts = service.getAllDept(new HqlConfig("zorder" , true));   
   return INPUT;   
}   
  
public String addPerson() {   
  service.savePerson(person);   
  ActionContext.getContext().put("runMsg", "人员增加成功!" + person.toString());   
  return SUCCESS;   
}  
不知道我表达清楚没有,我看的例子都是出现类型转换错误后,转向到jsp,这样在jsp中利用DAO或service来获得数据,但是我使用ftl作为view层,只有在action准备数据后才能正确显示,我奇怪的是为什么strtus框架不执行action而直接就到<action>...下的result进行匹配。不知道是不是的我的使用方法有问题,希望得到大家的帮助,在google上搜索很久,未果。 
第一次调用addPersonEntry.action能正常显示输入页面,输入不合法的内容后,按照我的设定<result name="input" type="chain">addPersonEntry</result> 应该跳转到addPersonEntry.action,然后执行我的public String addPersonEntry() 方法。根据此方法的返回值"input"将数据装载到ftl模板中,但实际情况是public String addPersonEntry() 方法没有执行,直接去按照
<result name="input" type="freeer">/person/addPersonEntry.ftl</result>  
去显示ftl的内容,由于没有数据出错。
我的环境是struts2.0.14 , freeer 2.3.8 。