先从struts2配置文件开始贴吧   <package name="admin" extends="struts-default" namespace="/BlackAdmin">
<action name="newsSectionAction_*" class="newsSectionAction" method="{1}">
<result name="newsSection">NewsSection.jsp</result>
<result name="listColumns">listColumns.jsp</result>
</action>
</package>spring 配置文件   我想这两个配置应该没有错吧要不然不会只有表单验证报错 <bean id="newsSectionDao" class="com.onionportal.blackadmin.dao.imp.NewsSectionDaoImp">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="newsSectionService" class="com.onionportal.blackadmin.service.imp.NewsSectionServiceImp">
<property name="newsSectionDao" ref="newsSectionDao"></property>
</bean>

<bean id="newsSectionAction" class="com.onionportal.blackadmin.action.NewsSectionAction">
<property name="newsSectionService" ref="newsSectionService"></property>
</bean>
Action类  NewsSectionAction.javapackage com.onionportal.blackadmin.action;import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;import com.onionportal.blackadmin.service.NewsSectionService;
import com.onionportal.blackadmin.service.imp.NewsSectionServiceImp;
import com.onionportal.orm.NewsPart;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;/**
 * @author <a href="mailto:[email protected]">Onion.Xiang</a>
 *  新闻栏目管理Action
 */
public class NewsSectionAction extends ActionSupport implements ModelDriven<NewsPart>{

/**序列化此类*/
private static final long serialVersionUID = -4087314881991815540L;
/**新闻栏目业务逻辑层注入*/
private NewsSectionService newsSectionService;
/**新闻栏目列表*/
private List<NewsPart> newsPartList=new ArrayList<NewsPart>();
/**Action 前台显示消息*/
private String actionMsg;
/**上级栏目ID*/
private String parentid;

/**采用模型驱动*/
private NewsPart model=new NewsPart();//用于封装新闻栏目属性的模型实例

public NewsPart getModel() {
return model;
}


public void setModel(NewsPart model) {
this.model = model;
}
/**
 * 获得所有的新闻栏目
 * 新闻栏目浏览
 *  @return newsSection
 */
public String newsBrowseClumns(){
if(actionMsg!=null){
try {
actionMsg = new String(actionMsg.getBytes("ISO8859-1"),"gbk");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
addActionMessage(actionMsg);
}
newsPartList=newsSectionService.getNewsPart();
return "newsSection";
}

/**
 *处理一级新闻栏目下拉列表请求
 *@return String  listColumns
 */
public String listColumns(){
newsPartList=newsSectionService.getNewsPart();
NewsPart firstnode = new NewsPart();
firstnode.setId(-1);
firstnode.setPartName("无上级栏目");
newsPartList.add(0,firstnode);
return "listColumns";
}

/**
 *添加新闻栏目
 *@type String
 */
public String addColumns(){
System.out.println(parentid);
NewsPart news=new NewsPart();
news.setNewsPart(model.getNewsPart());
news.setPartExplan(model.getPartExplan());
System.out.println("===="+model.getPartName()+"==="+model.getPartExplan()+"==="+this.getParentid());
return "newsSection";
}



public String getParentid() {
return parentid;
}
public void setParentid(String parentid) {
this.parentid = parentid;
}
public void setNewsSectionService(NewsSectionService newsSectionService) {
this.newsSectionService = newsSectionService;
}
public void setNewsSectionService(NewsSectionServiceImp newsSectionService) {
this.newsSectionService = newsSectionService;
} public String getActionMsg() {
return actionMsg;
} public void setActionMsg(String actionMsg) {
this.actionMsg = actionMsg;
} public List<NewsPart> getNewsPartList() {
return newsPartList;
} public void setNewsPartList(List<NewsPart> newsPartList) {
this.newsPartList = newsPartList;
}

}表单验证  xml    NewsSectionAction-newsSectionAction_addColumns-validation.xml<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<!-- 对新闻栏目表单中的两个必填字段进行必填验证 -->
<validators>
<field name="partName">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>${getText("columns_validation_name")}</message>
</field-validator>
</field>
<field name="partExplan">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>${getText("columns_validation_code")}</message>
</field-validator>
</field>
</validators>页面代码    <s:form action="newsSectionAction_addColumns" theme="simple">
<table width="300" align="center" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td align="right"><s:text name="columns_label_parent"/>:</td>
    <td>
     <s:url id="tolist" value="newsSectionAction_listColumns.action">
     <s:param name="parentid" value="parentid" />
     </s:url>
     <sx:div href="%{tolist}" id="norefresh" theme="ajax">
     </sx:div>
    </td>
  </tr>
  <tr>
    <td align="right"><s:text name="columns_label_name"/>:</td>
    <td><s:textfield name="partName" size="22"/></td>
  </tr>
  <tr>     
    <td align="right"><s:text name="columns_label_code"/>:</td>
    <td><s:textfield name="partExplan" size="22"/></td>          
  </tr>
</table>
<br>
  <div align="center">
<sx:submit key="label_submit"/>&nbsp;
<s:reset key="label_reset"/>&nbsp;
<s:set name="label_return" value="%{getText('label_return')}"/>
    <input type="button" name="btn_ret" value="${label_return}" onClick="window.location='newsSectionAction_browseColumns.action';">
  </div>
</s:form> 错误代码No result defined for action com.onionportal.blackadmin.action.NewsSectionAction and result input
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:375)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at 
不加这个表单验证不会出现错误

解决方案 »

  1.   

    No result defined for action com.onionportal.blackadmin.action.NewsSectionAction and result input
    你要给action的result配置一个input属性
      

  2.   

    简单情况都是
    result= success
    result= error
    result= input
      

  3.   

    问题已解决   把这个theme="simple"去掉就没事了 我也不知道是神马意思   但是表单验证错误了之后就所有的action全部报错!蛋疼啊