天天看點

S2SH 學習筆記之easyui——表單傳遞類對象

  在學習S2SH架構,jsp表單處理時,傳遞參數如String,int常見的參數基本沒有問題,但在傳遞一個類(Model)時,遇到一點點小挫折。

  通常表單傳參數步驟如下:

 伺服器(Action類)

 1.定義變量

 2.建立getter和setter,便于前端傳值

Scope("prototype")
@Namespace("/Control")
@Action(value="AlarmGroup_SMS")
public class RTDAlarmGroup_SMSAction  extends BaseAction  {
	private String s_UserID;
	private String s_delUserIDs;
	private RTDAlarmGroup_SMS_User User;

	public String getUserID() {
		return s_UserID;
	}

	public void setUserID(String s_UserID) {
		this.s_UserID = s_UserID;
	}
	
	public String getDelUserIDs() {
		return s_delUserIDs;
	}

	public void setDelUserIDs(String s_delUserIDs) {
		this.s_delUserIDs = s_delUserIDs;
	}

	
	public RTDAlarmGroup_SMS_User getUser() {
		return User;
	}

	public void setUser(RTDAlarmGroup_SMS_User User) {
		this.User = User;
	}

	// 其他代碼
           

  前台(jsp)

<body style="margin: 5px;">
	<div class="easyui-layout" data-options="fit:true,border:false,title:'短信使用者'" >
	  <div data-options="region:'north',split:true,title:'<%=s_Title%>',collapsible:false" style="height:20px;">
	  </div>
	  <div data-options="region:'west',split:true,title:'短信使用者',collapsible:false" style="width:50%;">
		<table id="dgUser"></table>
	  </div>
	  
	  <div data-options="region:'east',split:true,title:'短信報警點',collapsible:false" style="width:50%;">
		<table id="dgAlmTag" data-options="fit:true,border:false"></table>
	  </div> 
	</div>
	<!-- 屬性對話框 User-->
	<div id="dlgUser" class="easyui-dialog" style="width: 350px;height: 250px;padding: 10px 20px"
		closed="true" buttons="#dlg-buttons">
		<form id="fm" method="post">
			<table cellspacing="5px;">
				<tr style="display:none;">
					<td>ID:</td>
					<td><input class="easyui-validatebox" type="text" name="User.id" id="ID"   disabled="true" /></td>
				</tr>
				<tr>
					<td>姓  名:</td>
					<td><input class="easyui-validatebox" type="text" name="User.Name" id="Name"  required="true" style="width:150px;"/></td>
				</tr>
				<tr>
					<td>手  機:</td>
					<td><input class="easyui-validatebox" type="number" validType="length[11,11]" name="User.Phone" id="Phone"  required="true" style="width:150px;"/></td>
				</tr>
				<tr style="display:none;">
					<td>短信通知::</td>
					<td><input class="easyui-validatebox" type="text"  name="User.Checked" id="Checked"   style="width:150px;"/></td>
				</tr>
				<tr>
					<td>短信通知:</td>
					<td style="text-align:left">
						<span class="radioSpan">
                			<input type="radio" name="UserChecked" id="UserChecked0"  value="false">否   </input>
                			<input type="radio" name="UserChecked" id="UserChecked1"  value="true">是   </input>
             			</span>
            		</td>
				</tr>
			</table>
		</form>
	</div>
	
	<div id="dlg-buttons">
		<a href="javascript:save()" target="_blank" rel="external nofollow"  class="easyui-linkbutton" iconCls="icon-ok"> 保 存</a>
		<a href="javascript:close()" target="_blank" rel="external nofollow"  class="easyui-linkbutton" iconCls="icon-cancel"> 關 閉</a>
	</div>	

</body>
           

    javascript部分

<span style="font-family: Arial, Helvetica, sans-serif;">	function addUser(){</span>
           
resetValue();
		
		$(dlgUser).dialog("open").dialog("setTitle","新增 - 短信使用者資訊");

		url = "${contextPath}/Control/AlarmGroup_SMS!addUser?ID_AlarmGroup=<%=ID_AlarmGroup%>";
	}

	function editUser(){
		var selectedRows=$(dgUser).datagrid('getSelections');
		if(selectedRows.length!=1){
			$.messager.alert("系統提示","請選擇一條要編輯的資料!");
			return;
		}
		
		var row = selectedRows[0];
		$(dlgUser).dialog("open").dialog("setTitle","編輯 - 短信使用者資訊");

		$("#ID").val(row.id);
		$("#Name").val(row.Name);
		$("#Phone").val(row.Phone);
		$("#Checked").val(row.Checked);
		//$("#Checked1").combobox("setValue",row.Checked);

		if (row.Checked == true)
			document.getElementById("UserChecked1").checked=true;
		else
			document.getElementById("UserChecked0").checked=true;
		
		url="${contextPath}/Control/AlarmGroup_SMS!editUser?ID_AlarmGroup=<%=ID_AlarmGroup%>&UserID=" + row.id;
	}
	
	function delUser(){
		var selectedRows=$(dgUser).datagrid('getSelections');
		if(selectedRows.length == 0){
			$.messager.alert("系統提示","請選擇要删除的資料!");
			return;
		}

		var s_Ids = [];
		for(var i = 0; i < selectedRows.length; i++){
			s_Ids.push("'" + selectedRows[i].id + "'");			
		}
		var ids = s_Ids.join(",");
		$.messager.confirm("系統提示","您确認要删掉這<font color=red>"+selectedRows.length+"</font>條資料嗎?",function(r){
			if(r){
				$.post("${contextPath}/Control/AlarmGroup_SMS!deleteUser",{ID_AlarmGroup:<%=ID_AlarmGroup%>,DelUserIDs:ids},function(result){
					if(result.success){
						//$.messager.alert("系統提示","您已成功删除資料!");
						$(dgUser).datagrid("reload");
					}else{
						$.messager.alert('系統提示',result.errorMsg);
					}
				},"json").error(function() {
					alert("執行失敗");
					})
					;
			}
		});
	}
	
	function save(){
		$("#fm").form("submit",{
			url:url,
			onSubmit:function(){
				if($("#Name").val()==""){
					$.messager.alert("系統提示","名稱不能為空");
					return false;					
				}
				if($("#Phone").val()==""){
					$.messager.alert("系統提示","手機不能為空");
					return false;					
				}
				// 
				$("#Checked").val($('input[name="UserChecked"]:checked').val());
				//$.messager.alert("系統提示Checked",$("#Checked").val());
				return $(this).form("validate");
			},
			success:function(data){
				var result = eval('(' + data + ')');
				if(result.errorMsg){
					$.messager.alert("系統提示",result.errorMsg);
					return;
				}else{
					//$.messager.alert("系統提示","儲存成功");
					resetValue();
					$(dlgUser).dialog("close");
					$(dgUser).datagrid("reload");
				}
			}
		});
	}
	
	function resetValue(){
		$("#ID").val("");
		$("#Name").val("");
		$("#Phone").val("");
//		$("#Checked").combobox("setValue","1");
		
		//$.messager.alert("系統提示:UserChecked",$('input[name="UserChecked"]:checked').val());		
		//var str = document.getElementsByName("UserChecked");
		document.getElementById("UserChecked1").checked = true;
	}
	
	function close(){
		$(dlgUser).dialog("close");
		resetValue();
	}	
           

    但始終得到的User是一個null,無法正确地從前台擷取到值,s_UserID就能夠正常從前台擷取值,經過不斷測試(因初學,對Action機制了解不深),發現是User沒有初始化的原因,導緻前端無法傳值,于是修改如下:

// SMS_User 必須初始化,否則easyui 表單無法向User傳值
	private RTDAlarmGroup_SMS_User User = new RTDAlarmGroup_SMS_User();
           

這樣,就能很順利從前台得到對應的值了。

很奇怪:為啥int、String就不用初始化就可以呢,而自己的類就必須要先初始化呢。

另外,特記:前台傳遞參數的名字調用Action類的get對應的名字,和Action定義的變量名不一定完全一緻。

例如:

變量名為s_UserID;但對應的get是GetUserID(),

private String s_UserID;
	public String getUserID() {
		return s_UserID;
	}

	public void setUserID(String s_UserID) {
		this.s_UserID = s_UserID;
	}
           

則表單對應調用的應該是UserID,而不是s_UserID;

url="${contextPath}/Control/AlarmGroup_SMS!editUser?ID_AlarmGroup=<%=ID_AlarmGroup%>&UserID=" + row.id;
           

前端效果:

S2SH 學習筆記之easyui——表單傳遞類對象