首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

究竟struts2中的DefaultTypeConverter是如何用的

2012-03-28 
究竟struts2中的DefaultTypeConverter是怎么用的servlet.java:package com.aaimport com.opensymphony.xw

究竟struts2中的DefaultTypeConverter是怎么用的
servlet.java:
package com.aa;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;


public class servlet extends DefaultTypeConverter {
@SuppressWarnings("rawtypes")
public java.lang.Object convertValue(java.util.Map context, java.lang.Object value, java.lang.Class toType) {
if(toType == String.class) {
String[] params = (String[])value;
String[] paramsSeparate = params[0].split(",");

javabean jb = new javabean();
jb.setUserName(paramsSeparate[0]);
jb.setUserPass(paramsSeparate[1]);

return jb;
}
else if(toType == javabean.class) {
javabean params = (javabean)value;

return "<" + params.getUserName() + "," + params.getUserPass() + ">";
}

return null;
}
}



SubmitAction-conversion.properties:
user=com.aa.servlet



NewFile.jsp:
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="servlet" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="userName"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="userPass"/></td>
</tr>
<tr>
<input type="submit"/>
<input type="reset"/>
</tr>
</table>
</form>
</body>
</html>


struts.xml:
<?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">
<struts>
<constant name="struts.devMode" value="true"/>
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.i18n.encoding" value="UTF-8"/>

<package name="Submit" extends="struts-default">
<action name="Submit" class="com.aa.SubmitAction">
<result name="input">/NewFile.jsp</result>
<result>/NewFile1.jsp</result>
<result name="error">/Error.jsp</result>
</action>
</package>
</struts>

SubmitAction.java:
package com.aa;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class SubmitAction extends ActionSupport implements ModelDriven<javabean> {
/**

*/
private static final long serialVersionUID = 4296997394602800862L;

private javabean user = new javabean();

@Override
public javabean getModel() {
if(user == null)
user= new javabean();

return user;
}

public void validate() {
if(getModel().getUserName() == null || getModel().getUserName().equals(""))
addFieldError(getModel().userName, "user.required");
if(getModel().getUserPass() == null || getModel().getUserPass().equals(""))


addFieldError(getModel().userPass, "pass.required");
}

@Override
public String execute() throws Exception {
if(getModel().getUserName().equals("scott") && getModel().getUserPass().equals("123456"))
return SUCCESS;
else
return ERROR;
}
}


javabean.java:
package com.aa;

public class javabean {
protected String userName;
protected String userPass;

public void setUserName(String userName) { this.userName = userName; }
public String getUserName() { return this.userName; }

public void setUserPass(String userPass) { this.userPass = userPass; }
public String getUserPass() { return this.userPass; }
}


为什么运行提交时显示如下错误:
Struts Problem Report
Struts has detected an unhandled exception: 

Messages: There is no Action mapped for namespace / and action name servlet. 
 


--------------------------------------------

Stacktraces
There is no Action mapped for namespace / and action name servlet. - [unknown location] 
  com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:189)
  org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
  org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
  com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
  org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
  org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
  org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
  org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
  org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
  org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
  org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
  org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
  java.lang.Thread.run(Unknown Source)
   

--------------------------------------------

You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set: 

  struts.devMode=false

in your WEB-INF/classes/struts.properties file. 


[解决办法]
<form action="servlet" method="post">
<package name="Submit" extends="struts-default">
<action name="Submit" class="com.aa.SubmitAction">
<result name="input">/NewFile.jsp</result>
<result>/NewFile1.jsp</result>
<result name="error">/Error.jsp</result>
</action>
</package>
你检查下你的页面form的Action和配置文件中的Action是否相同
------解决方案--------------------


楼上正解

热点排行