kisonlee 2009-08-26 10:10
浏览 203
已采纳

这个action为啥始终说没有input定义,错在哪呢

spread.action
[code="java"]package action;

import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import javax.imageio.ImageIO;
import org.apache.struts2.ServletActionContext;
import bean.DBUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Spread extends ActionSupport
{
private static final long serialVersionUID = 1L;

public String getLanguage()
{
    return language;
}
public void setLanguage(String language)
{
    this.language = language;
}
public String getType()
{
    return type;
}
public void setType(String type)
{
    this.type = type;
}
public String getTeachpoint()
{
    return teachpoint;
}
public void setTeachpoint(String teachpoint)
{
    this.teachpoint = teachpoint;
}
public String getLevel()
{
    return level;
}
public void setLevel(String level)
{
    this.level = level;
}
public String getTheme()
{
    return theme;
}
public void setTheme(String theme)
{
    this.theme = theme;
}
public String getMedia()
{
    return media;
}
public void setMedia(String media)
{
    this.media = media;
}
public String getFullname()
{
    return fullname;
}
public void setFullname(String fullname)
{
    this.fullname = fullname;
}
public String getKeyword()
{
    return keyword;
}
public void setKeyword(String keyword)
{
    this.keyword = keyword;
}
public String getAuthor()
{
    return author;
}
public void setAuthor(String author)
{
    this.author = author;
}
public String getIsbn()
{
    return isbn;
}
public void setIsbn(String isbn)
{
    this.isbn = isbn;
}
public Date getWritetime()
{
    return writetime;
}
public void setWritetime(Date writetime)
{
    this.writetime = writetime;
}
public Date getPublictime()
{
    return publictime;
}
public void setPublictime(Date publictime)
{
    this.publictime = publictime;
}
public String getLength()
{
    return length;
}
public void setLength(String length)
{
    this.length = length;
}
public String getWidth()
{
    return width;
}
public void setWidth(String width)
{
    this.width = width;
}
public String getHeight()
{
    return height;
}
public void setHeight(String height)
{
    this.height = height;
}
public String getPages()
{
    return pages;
}
public void setPages(String pages)
{
    this.pages = pages;
}
public String getColoredpages()
{
    return coloredpages;
}
public void setColoredpages(String coloredpages)
{
    this.coloredpages = coloredpages;
}
public String getWeight()
{
    return weight;
}
public void setWeight(String weight)
{
    this.weight = weight;
}
public String getMaterial()
{
    return material;
}
public void setMaterial(String material)
{
    this.material = material;
}
public String getIntro()
{
    return intro;
}
public void setIntro(String intro)
{
    this.intro = intro;
}
public File[] getUpload()
{
    return upload;
}

public void setUpload(File[] upload)
{
    this.upload = upload;
}
public String[] getUploadContentType()
{
    return uploadContentType;
}
public void setUploadContentType(String[] uploadContentType)
{
    this.uploadContentType = uploadContentType;
}
public String[] getUploadFileName()
{
    return uploadFileName;
}

public void setUploadFileName(String[] uploadFileName)
{
    this.uploadFileName = uploadFileName;
}

public String getSavePath() 
{ 
    return ServletActionContext.getServletContext().getRealPath(savePath); 
} 
public void setSavePath(String savePath) 
{ 
    this.savePath = savePath; 
}
public String getChennel()
{
    return chennel;
}
public void setChennel(String chennel)
{
    this.chennel = chennel;
}
public String getMarketprice()
{
    return marketprice;
}
public void setMarketprice(String marketprice)
{
    this.marketprice = marketprice;
}
public String getSaleprice()
{
    return saleprice;
}
public void setSaleprice(String saleprice)
{
    this.saleprice = saleprice;
}
public String getAccess()
{
    return access;
}
public void setAccess(String access)
{
    this.access = access;
}

private boolean copy(File src, File dst)
{
    InputStream in = null;
    OutputStream out = null;
    try
    {
        try
        {
            in = new BufferedInputStream(new FileInputStream(src),BUFFER_SIZE);
            out = new BufferedOutputStream(new FileOutputStream(dst),BUFFER_SIZE);
            byte[] buffer = new byte[BUFFER_SIZE];
            int len = 0; 
            while ((len = in.read(buffer)) > 0)
            {
                out.write(buffer, 0, len);
            }
            return true;
        } 
        finally
        {
            if (in != null)
            {
                in.close();
            }
            if (out != null)
            {
                out.close();
            }
        }
    } catch(Exception e)
    {
        e.printStackTrace();
    }
    return false;
}

private boolean checkSize(File [] files)
{
    BufferedImage image = null;
    for (int i = 0; i < files.length; i++)
    {
        try
        {
            image = ImageIO.read(files[i]);
        } catch(IOException e)
        {
            e.printStackTrace();
        }
        String size = null;
        if (image.getWidth() > 260 || image.getHeight() > 260)
        {
            size ="上传图片宽高不能超过260*260";
            ActionContext.getContext().put("size",size);
            return false;
        }
    }
    return true;
}

private String getRealPath(String imageString)
{
    return getSavePath() + "\\" + imageString;
}

public String firstStep()
{
    return SUCCESS;
}

public String secondStep()
{       
    return SUCCESS;
}

public String thirdStep()
{
    return SUCCESS;
}

public String forthStep()
{
    return SUCCESS;
}

private String language;
private String type;
private String teachpoint;
private String level;
private String theme;

private String media;
private String fullname;
private String keyword;
private String author;
private String isbn;
private Date writetime;
private Date publictime;
private String length;
private String width;
private String height;
private String pages;
private String coloredpages;
private String weight;
private String material;
private String intro;

private static final int BUFFER_SIZE = 16 * 1024;
private File[] upload;
private String[] uploadContentType;
private String[] uploadFileName;
private String imageFileName;
private String savePath;
private String [] realPath = new String[2];

private String chennel;
private String marketprice;
private String saleprice;
private String access;

}
[/code]
struts.xml
[code="java"]<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">






/spread/spread1.jsp
/login.jsp
/login.jsp

<package name="authority" extends="struts-default">
    <interceptors>
        <interceptor name="authority" class="interceptor.AuthorityInterceptor" />
        <interceptor-stack name="mydefault">
            <interceptor-ref name="defaultStack" />
            <interceptor-ref name="authority" />
        </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="mydefault" />

    <global-results>
        <result name="login">/login.jsp</result>
    </global-results>

    <action name="FirstStep" class="action.Spread" method="firstStep">
        <result name="success">/spread/spread2.jsp</result>
    </action>

    <action name="SecondStep" class="action.Spread" method="secondStep">
        <result name="success">/spread/spread3.jsp </result>        
    </action>

    <action name="ThirdStep" class="action.Spread" method="thirdStep">
        <result name="success">/spread/spread4.jsp </result>
        <result name="input">/spread/spread3.jsp </result>
        <interceptor-ref name="fileUpload">
            <param name="allowedTypes">image/jpeg,image/pjpeg</param>
            <param name="maximumSize">204800</param>
        </interceptor-ref>
        <param name="savePath">/upload</param>
    </action>

    <action name="ForthStep" class="action.Spread" method="forthStep">
        <result name="success">/spread/spreadSucc.jsp</result>      
    </action>
</package>



[/code]
spread-validation.xml
[code="java"]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">



true
请输入教材全名

<field name="keyword">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入关键词</message>
    </field-validator>
</field>

<field name="author">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入输入作者名</message>
    </field-validator>
</field>

<field name="isbn">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入ISBN编号</message>
    </field-validator>
</field>

<field name="writetime">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请选择编著时间</message>
    </field-validator>
    <field-validator type="date">
        <param name="min">1949-01-01</param>
        <param name="max">2050-01-01</param>
        <message>请选择编著时间,时间范围必须在${min}到${max}之间</message>
    </field-validator>
</field>

<field name="publictime">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请选择发行时间</message>
    </field-validator>
    <field-validator type="date">
        <param name="min">1949-01-01</param>
        <param name="max">2050-01-01</param>
        <message>时间范围必须在${min}到${max}之间</message>
    </field-validator>
</field>

<field name="length">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入教材长度</message>
    </field-validator>
    <field-validator type="regex">
        <param name="expression"><![CDATA[^[1-9]\\d*.\\d* ¦0.\\d*[1-9]\\d*$]]></param>
        <message>必须是正数</message>
    </field-validator>
</field>

<field name="width">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入教材宽度</message>
    </field-validator>
    <field-validator type="regex">
        <param name="expression"><![CDATA[^[1-9]\\d*.\\d* ¦0.\\d*[1-9]\\d*$]]></param>
        <message>必须是正数</message>
    </field-validator>
</field>

<field name="height">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入教材高度</message>
    </field-validator>
    <field-validator type="regex">
        <param name="expression"><![CDATA[^[1-9]\\d*.\\d* ¦0.\\d*[1-9]\\d*$]]></param>
        <message>必须是正数</message>
    </field-validator>
</field>

<field name="pages">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入教材页数</message>
    </field-validator>
    <field-validator type="regex">
        <param name="expression"><![CDATA[^[1-9]\\d*$]]></param>
        <message>必须是正整数</message>
    </field-validator>
</field>

<field name="coloredpages">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入教材彩页数</message>
    </field-validator>
    <field-validator type="regex">
        <param name="expression"><![CDATA[^[1-9]\\d*$]]></param>
        <message>必须是正整数</message>
    </field-validator>
</field>

<field name="material">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入教材纸质</message>
    </field-validator>
</field>

<field name="weight">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>请输入单本重量</message>
    </field-validator>
    <field-validator type="regex">
        <param name="expression"><![CDATA[^[1-9]\\d*.\\d* ¦0.\\d*[1-9]\\d*$]]></param>
        <message>必须是正数</message>
    </field-validator>
</field>


[/code]
[b]问题补充:[/b]
异常信息
[code="java"]警告: The first TextProvider in the ValueStack (action.LoginCheck) could not locate the message resource with key '登录页面'
2009-8-26 14:57:49 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The default value expression '登录页面' was evaluated and did not match a property. The literal value '登录页面' will be used.
2009-8-26 14:57:49 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The first TextProvider in the ValueStack (action.LoginCheck) could not locate the message resource with key '登录页面'
2009-8-26 14:57:49 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The default value expression '登录页面' was evaluated and did not match a property. The literal value '登录页面' will be used.
2009-8-26 14:57:51 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The first TextProvider in the ValueStack (action.LoginCheck) could not locate the message resource with key '登录页面'
2009-8-26 14:57:51 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The default value expression '登录页面' was evaluated and did not match a property. The literal value '登录页面' will be used.
2009-8-26 14:57:51 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The first TextProvider in the ValueStack (action.LoginCheck) could not locate the message resource with key '登录页面'
2009-8-26 14:57:51 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The default value expression '登录页面' was evaluated and did not match a property. The literal value '登录页面' will be used.
2009-8-26 14:57:57 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The first TextProvider in the ValueStack (action.LoginCheck) could not locate the message resource with key '登录页面'
2009-8-26 14:57:57 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The default value expression '登录页面' was evaluated and did not match a property. The literal value '登录页面' will be used.
2009-8-26 14:57:58 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The first TextProvider in the ValueStack (action.LoginCheck) could not locate the message resource with key '登录页面'
2009-8-26 14:57:58 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: The default value expression '登录页面' was evaluated and did not match a property. The literal value '登录页面' will be used.
2009-8-26 14:58:25 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: Could not find action or result
No result defined for action action.Spread and result input
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:363)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:33)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Unknown Source)
[/code]
[b]问题补充:[/b]
前面的几个警告我也不明白啥意思呢
[b]问题补充:[/b]
配置文件
[code="java"]struts.messages.error.content.type.not.allowed= \u4EC5\u9650JPG\u683C\u5F0F\u56FE\u7247
struts.messages.error.file.too.large= \u56FE\u7247\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 200 KB
struts.messages.error.uploading= \u56FE\u7247\u4E0A\u4F20\u53D1\u751F\u5185\u90E8\u9519\u8BEF
username= \u7528\u6237\u540D
password= \u5BC6\u7801
login= \u767B\u5F55
loginPage= \u767B\u5F55\u9875\u9762
title=\u6559\u6750\u63A8\u5E7F\u6A21\u677F[/code]
[b]问题补充:[/b]
是不是因为我把3个jsp里面的属性都放到一个action里面,当第一个jsp请求action时,action拿不到其他的非第一个jsp的属性,从而产生错误啊?
错误信息我看不太懂呢
[b]问题补充:[/b]
lovewhzlq

可是当我从jsp1提交完信息后,本应转到jsp2,结果就是

type Status report

message No result defined for action action.Spread and result input

description The requested resource (No result defined for action action.Spread and result input) is not available.

[b]问题补充:[/b]
我发现问题,其实不是我的action有问题,而是拦截器配置的问题

先前的拦截器:
[code="java"]












     <default-interceptor-ref name="mydefault" />  [/code]

后来的拦截器:
[code="java"]

    <default-interceptor-ref name="authority" />[/code]

也就是说是defaultStack在出问题,但我不明白之前的配置问题出在哪,哪位明白拦截器的讲讲哈

另外,这样做之后,倒是可以跳转了,但是在action的firstStep方法里,根本无法获得jsp1中的属性,打印结果全部是null,不知道咋回事,之前还是好使的啊

  • 写回答

5条回答 默认 最新

  • wanghaolovezlq 2009-08-27 12:49
    关注

    你这样配置

    也就是把struts2的内部默认拦截器都去掉了,不用,它就是靠拦截器做事的,(比如绑定action的属性,解析请求参数,等等)
    这样一定不行的啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐