论坛首页 入门技术论坛

验证失败返回怎么让用户输入信息显示

浏览 3274 次
该帖已经被评为新手帖
作者 正文
   发表时间:2006-10-26  
webwork在验证出错时转向其他action 要保存错误信息 是不是result必须设为chain
我这样做每次返回页面用户输入的东西都没有了 要重新填写 不知道各位大侠是怎么做的
下面这个就是从一个编辑页面出错后返回该编辑页面 页面上有一些数据需要取 不能直接
转回jsp吧 但用户输入的东西就没有了 这样的页面转向会不会有问题 每次都要查询数据库

tochangestatus->changestatus.jsp->changestatus[input]->tochangestatus...

<action name="tochangestatus" class="changeStatusAction" method="doInput">
    	<interceptor-ref name="params" />
    	<result name="input">/jsp/tms/changestatus.jsp</result>
</action>
<action name="changestatus" class="changeStatusAction" method="changeStatus">
	<interceptor-ref name="defaultStack-auth" />
	<interceptor-ref name="validation"/>
         <interceptor-ref name="workflow"/> 
         <interceptor-ref name="token"/>
    	<result name="input" type="chain">tochangestatus</result>
	<result name="invalid.token">/jsp/doublepost.jsp</result>
    	<result name="success" type="redirect-action">
    		<param name="namespace">/truck</param>
    		<param name="actionName">list</param>
    	</result>
</action> 

         	private Truck truck;
	private List truckList;
	private LoadInfo info = new LoadInfo();
         ..........

	public String doInput() throws Exception {
		truckList = truckManager.queryForList("queryTruckListByOwnerId", ownerId);
		if (StringUtils.isNotEmpty(truckId))
			truck = truckManager.getTruckById(truckId);
		
		return INPUT;
	}
	
	public String execute() throws Exception {
		LoadInfo info = (LoadInfo)getModel();
		if ( info != null ) {
			loadManager.createLoadInfo(info);
		} 
		return SUCCESS;
	}
   发表时间:2006-10-26  
input返回chain,这种做法很怪异。这样它继续转到下一个action执行,但是在下一个action不是返回success而是继续返回input。输入的信息丢失肯定是你action代码组织的问题,不是webwork的问题。比如你录入一个账号,要先对这个账号进行校验,校验不通过,但是你又继续执行了某个action把你页面将要显示的那个账号对象赋值为空了,这样就会丢失信息。
0 请登录后投票
   发表时间:2006-10-26  
刚开始用webwork 很多东西不知道 是不是转到当前jsp就可以了 不用再去查询了
但我转过去我的一些对象就没有了 页面就不能获得数据 重新转到action查询不用chain返回页面就
没有错误信息fieldErrors为空的
0 请登录后投票
   发表时间:2006-10-26  
谁能告诉我怎样在验证出错再查询后再显示错误信息 不用chain吗
0 请登录后投票
   发表时间:2006-10-27  
这个功能在 struts 里面有一个专门的解决方法:
  public ActionForward execute(ActionMapping mapping, ActionForm baseForm,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
      return (mapping.getInputForward());
  }


在 webwork 里面如果也要实现类似的功能,用类似如下的方法

在 xwork.xml 里面配置:

  <package name="register" extends="default">
    <action name="register" class="...">
      <result name="REGISTER" type="dispatcher">
        <param name="location">/register/register.jsp</param>
      </result>
      <result name="SUCCESS" type="dispatcher">
        <param name="location">/register/success.jsp</param>
      </result>
      <interceptor-ref name="simpleStack"/>
    </action>
  </package>


在 action 里面实现:

public class RegisterAction extends ActionSupport {
    private User _user;
    private UserService _userService;

    public User getUser() {
        return _user;
    }

    public String execute() throws Exception {
        ......
        if( _userService.add( _user ) ) {
            return "SUCCESS";
        } else {
            return "REGISTER";
        }
    }
}


在页面上写

<form name="registerForm" action="register.action" method="POST" >
<INPUT id="username" name="user.username" value="<ww:property value='user.username'/>">
<INPUT id="nickname" name="user.nickname" value="<ww:property value='user.nickname'/>">
......
</form>


由于在失败之后, execute return "REGISTER" ,此时 action context 和 用户提交时是一样的,所以页面还可以从 action context 里面获得用户之前输入的值。
0 请登录后投票
   发表时间:2006-10-27  
谢谢你们的答复
我的edit页面有其他信息 我直接转会jsp页面那些信息就没有了:
下面这个就是 我直接转回去select中就只有一个 是不是我的配置不对
EditAction:
	private User user=new User();
	private String passwords;
	private List list;
         。。。。。
	public Object getModel() {
		return user;
	}
	public String input(){
		//get data from database
		list=new ArrayList();
		list.add("12");
		list.add("34");
		list.add("56");
		user.setName("zsan");
		user.setPassword("222");
		user.setEmail("1@1.com");
		passwords="test";
		return SUCCESS;
	}
	public String save(){
		//manager.save(user);
		return SUCCESS;
	}

xwork.xml
    <package name="web" extends="webwork-default" namespace="/myweb">
		<action name="edit" class="editAction" method="input">
         <result name="success">/edit.jsp</result>
		 <result name="input">/index.jsp</result>
        </action>
 
       <action name="save" class="editAction" method="save">
        <interceptor-ref name="model-driven"/>
       	<interceptor-ref name="params"/>
       <interceptor-ref name="validation"/>       	        
         <interceptor-ref name="workflow"/>
         <result name="success">/edit-result.jsp</result>
		 <result name="input">/edit.jsp</result>
        </action>
    </package>

context.xml
<beans default-autowire="autodetect">  
    <bean name="editAction" class="example.EditAction" singleton="false"/>
</beans>

edit.jsp
	<ww:form  namespace="/myweb" action="save" method="post">
		<ww:textfield label="Username" name="name" required="true"/><ww:fielderror><ww:param value="%{'name'}"/></ww:fielderror><br>
		<ww:textfield label="Password" name="passwords" required="true"/><ww:fielderror><ww:param value="%{'passwords'}"/></ww:fielderror><br>
		<ww:textfield label="Email" name="email"/><ww:fielderror><ww:param value="%{'email'}"/></ww:fielderror><br>
		<ww:textfield label="Age" name="age"/><ww:fielderror><ww:param value="%{'age'}"/></ww:fielderror><br>
		<ww:textfield label="IP Reg" name="reg"/><ww:fielderror><ww:param value="%{'reg'}"/></ww:fielderror><br>
		<select name="list">
			<ww:iterator value="list" status="li">
				<option name='<ww:property value="#li.count"/>'><ww:property/></option>
			</ww:iterator>
		</select>
		<ww:submit value="Submit"/><br>	
	</ww:form>
  • TestWebWork.rar (42.8 KB)
  • 描述: 整个project不含lib
  • 下载次数: 12
0 请登录后投票
   发表时间:2006-10-27  
有谁能解答一下吗 急啊
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics