这是一个非常令我百思不解的错误,我做的是尚学堂的OA项目,用的是struts2,我的jsp中主要代码如下:
<form action="addworkflow.action" method="post" enctype="multipart/form-data"><TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:580px;">
<TBODY>
<TR>
<!-- 这里是添加、编辑界面的标题 -->
<td align="center" class="tdEditTitle">添加或重新上传流程定义文件和图片</TD>
</TR>
<TR>
<td>
<!-- 主输入域开始 -->
请选择上传的流程定义文件:<input type="file" name="processDefinition"> <br>
请选择上传的流程定义图片:<input type="file" name="processImage"> <br>
<input type="submit" name="submit" value="上传">
<!-- 主输入域结束 -->
</td>
</TR>
</TBODY>
</TABLE></form>    

struts.xml文件配置如下:
<action name="addworkflow" class="workflows" method="add">
<result>common/add_success.jsp</result>
</action>
Action的代码:
package org.myy.action;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;import org.apache.struts.upload.FormFile;
import org.myy.manager.WorkflowManager;import com.opensymphony.xwork2.ActionSupport;public class WorkFlowManagerAction extends ActionSupport{ private int id;

private String name;

//上传的流程定义文件由----原来的FormFile改为**
public FormFile processDefinition; //上传的流程定义图片----原来的FileForm改为**
public FormFile processImage; //注入spring对象
private WorkflowManager workflowManager;
private List workflows;


public String execute()throws Exception
{
this.workflows = workflowManager.searchAllWorkflows();

return SUCCESS;
} public String add() throws Exception{

//先判断上传的文件是否为空
System.out.println("WorkFlowManagerAction add running..."); workflowManager.deployProcessDefinition(processDefinition.getFileData(), processImage.getFileData());
return SUCCESS;
}

public String del()throws Exception{

workflowManager.delWorkflow(this.getId());
return SUCCESS;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public WorkflowManager getWorkflowManager() {
return workflowManager;
}
public void setWorkflowManager(WorkflowManager workflowManager) {
this.workflowManager = workflowManager;
}
public List getWorkflows() {
return workflows;
}
public void setWorkflows(List workflows) {
this.workflows = workflows;
} public FormFile getProcessDefinition() {
return processDefinition;
} public void setProcessDefinition(FormFile processDefinition) {
this.processDefinition = processDefinition;
} public FormFile getProcessImage() {
return processImage;
} public void setProcessImage(FormFile processImage) {
this.processImage = processImage;
}}
DAO中的WorkflowManager类中调用的方法如下:
public void deployProcessDefinition(byte[] processDefinition,byte[] processImage) {
System.out.println("hibernate.deployProcessDefinition running....");
//通过byte[]创建ProcessDefinition对象
ProcessDefinition def = 
ProcessDefinition.parseXmlInputStream(
new ByteArrayInputStream(processDefinition)); 

//将流程定义文件部署到JBPM
getContext().deployProcessDefinition(def);

//首先查找一下Workflow对象是否已经存在
Workflow workflow = (Workflow)getSession()
.createQuery("select w from Workflow w where w.name = ? ")
.setParameter(0, def.getName())
.uniqueResult();

//如果流程尚未存在,则创建
if(workflow == null){
workflow = new Workflow();
workflow.setName(def.getName());
workflow.setProcessDef(processDefinition);
workflow.setProcessImage(processImage);
getHibernateTemplate().save(workflow);
return;
}

//如果流程已经存在,则更新
workflow.setName(def.getName());
workflow.setProcessDef(processDefinition);
workflow.setProcessImage(processImage);
getHibernateTemplate().update(workflow);
}
当我执行WorkflowManagerAction中的add方法时却显示如下错误:
22:22:49,867 ERROR Dispatcher:512 - Could not find action or result
No result defined for action org.myy.action.WorkFlowManagerAction and result input - action - file:/D:/Tomcat%206.0/webapps/WebOffice1.1/WEB-INF/classes/struts_workflow.xml:24:61
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:350)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:184)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
...
找不到返回视图?我只让他返回SUCCESS啊?配置文件没问题啊,更令人不解的是,控制台不输出:WorkFlowManagerAction add running...,当我在页面不输入值直接提交时,能够输出:WorkFlowManagerAction add running...并报空指针异常,当我配置了input的返回值:<result name="input">common/input.jsp</result>时跳到了input的视图,可我没有让他返回input啊,这是什么错误啊,望高手指教??

解决方案 »

  1.   

    看最后一句,既然返回input就是说你页面内容转换成action成员变量时有错误啦,检查一下你那两个processDefinition,processImage有值吗?
      

  2.   


    我也感觉应该是页面内容转换成Action变量时的错误;我的页面是两个file的表单,以二进制流的形式提交,在Action中使用FormFile进行接收值,struts2兼容struts1,转换应该没问题啊另外我现在也不能检查两个变量是否有值,因为进入Action就被返回input,不能执行方法,也不能输出值。