使用dwr遇到的对象封装问题
使用dwr,需要返回一个java对象,但是这个java对象里面不是简单类型的数据,全是封装好的对象进行的再次封装
这个时候我应该怎么再js里面正确取得这个返回的对象,并且能够alert出对应的值.
使用dwr,需要返回一个java对象,但是这个java对象里面不是简单类型的数据,全是封装好的对象进行的再次封装
这个时候我应该怎么再js里面正确取得这个返回的对象,并且能够alert出对应的值.
想向自己做的一个小论坛里加入类似新浪微薄的讨论功能,弱弱的问下:要实现动态刷新要用到哪些技术呢?或者说整个要实现一个微博要在哪些功能上用到哪些技术,有没有牛人能给说说他的业务逻辑。另外,像新浪微博那样输入“@”后动态搜索好友列表使用js做的么?
本人使用 prototype 1.5.0, 之前在 ie6/ ff以及都能正常运行,但在ie7下,却出现了问题
问题:在使用了each方法之前,我用了
function view_init_newtips()
{
var elements = $$(‘[webtip]‘);
//其中 webtip这是一个html属性, 如 一个页面中有 <div webtip="hello"> ….</div> <td webtip="exten"></td>
在 ie6/ff下 elements是返回该属性所在的对象数组, 但在ie7下则是缺少对象
elements.each(_view_enable_newtip);
}
prototype.js有些代码没看懂,跟晕了……………………..肯请大家帮忙
哪位大侠有extjs+struts2的例子啊,能否共享一下,小弟万分感谢!我的邮箱daoyang.2531@163.com
struts.xml中action的配置 name="success" 后面是要跳转的页面,如果用extjs,如何跳转啊?是吧js代码加到html中吗?也可以使.jsp文件中吗?
后台Action中部分代码:
JSONObject json=new JSONObject();//要返回的json对象
JSONArray jArray=new JSONArray();//包含所有错误信息的jArray
JSONObject jErrors1=new JSONObject();//错误信息对象1.2.3.4.5
JSONObject jErrors2=new JSONObject();
JSONObject jErrors3=new JSONObject();
JSONObject jErrors4=new JSONObject();
JSONObject jErrors5=new JSONObject();
jErrors1.put("errror1",1);//往错误信息对象中添加到错误信息
jErrors2.put("errror2",2);
jErrors3.put("errror3",3);
jErrors4.put("errror4",4);
jErrors5.put("errror5",5);
jArray.put(jErrors1);//将错误信息对象添加到jArray
jArray.put(jErrors2);
jArray.put(jErrors3);
jArray.put(jErrors4);
jArray.put(jErrors5);
json.put("errors",jArray);
retrun json.toString();
前台EXT部分代码:
alert(action.result.errors);
这样的结果是获取到一个jArray对象(object),但是我原本是想获取到errror1,与error2。请问各位高手该怎么获取。谢谢!
以下代码大家只要在页面里配置好所需ext文件的路径即可。
程序说明:在页面被载完后会自动弹出一个窗口,窗口里有包含一个EditorGridPanel对象
我要实现的是:如何动态设置每个“年龄”编辑框的相应配置项的值(如:动态设置最小年龄和最大年龄),
我不知道到底是在win.on()代码前动态设置,还是在win.on()代码里动态设置,也不知道怎么实现,我现在在做项目,望高手帮帮忙啊,先谢谢
<script type="text/javascript">Ext.onReady(function(){ var data=[[1,"张三",24],[2,"asd",23],[3,"asda",34]]; var Person=new Ext.data.Record.create( [ {name:"personId",mapping:0}, {name:"personName",mapping:1}, {name:"personAge",mapping:2} ] ); var grid=new Ext.grid.EditorGridPanel( { title:"asdsad", width:800, height:400, frame:true, //表示单击一次可以编辑,默认是2次 clicksToEdit : 1, store:new Ext.data.Store( { reader:new Ext.data.ArrayReader({id:0},Person), data:data } ), columns:[ {header:"id",width:80,dataIndex:"personId",sortable:false}, {header:"姓名",width:80,dataIndex:"personName",sortable:true}, {header:"年龄",width:80,dataIndex:"personAge",sortable:true, editor:new Ext.form.NumberField( { selectOnFocus:true, blur:function () { if (this.getValue()<20) { Ext.Msg.alert("提示","年龄不能小于20", function(){ var a = grid.getSelectionModel().getSelectedCell(); grid.startEditing(a[0],a[1]); }); } } } )} ] } ); function view() { var win = new Ext.Window({ id:"windows", width:800, height:400, plain: true, modal:true,//顶端显示 items: grid }); // win.on("show",function(obj) //{ // } // ) win.show(); } //调用view方法显示窗体 view(); });</script>
在页面放置一个隐藏文本域
<ext:Hidden runat="server" Enabled="false" ID="hidFlag">
<Listeners>
<Enable Handler="refreshTree(#{pnlTree});"/> //pnlTree就是我左边的树
</Listeners>
</ext:Hidden>
当通过Ajax方法更改数据后设置 this.hidFlag.Enabled = true;
随即调用
function refreshTree(tree) { Coolite.AjaxMethods.RefreshMenu({ success: function(result) { var nodes = eval(result); tree.root.ui.remove(); tree.initChildren(nodes); tree.root.render(); } }); }
注:必须调用JS重新渲染,不然虽然绑定了数据,但原本就是ajax的数据绑定,所以页面前端没有同时渲染而已
后台对应一个AjaxMethod
[AjaxMethod] public string RefreshMenu() { Coolite.Ext.Web.TreeNodeCollection nodes = this.BuildTree(null); return nodes.ToJson(); }
//注意:
BuildTree(null)为我迭代构建树的方法,但注意返回类型
private Coolite.Ext.Web.TreeNodeCollection BuildTree(Coolite.Ext.Web.TreeNodeCollection nodes)
{
if (nodes == null)
{
nodes = new Coolite.Ext.Web.TreeNodeCollection();
}
List<EntityUserInfo> list = new BLLUserInfo().GetAllUser();
foreach (var lis in list)
{
_parent = lis.Id;
Coolite.Ext.Web.TreeNode childNode = new Coolite.Ext.Web.TreeNode();
childNode.Text = lis.UserName;
childNode.NodeID = lis.Id.ToString();
childNode.Icon = Icon.UserGreen;
if (lis.HasSon)
{
childNode.Expanded = true;
childNode.Icon = lis.ParentId == 0?Icon.UserHome:Icon.UserRed;
childNode.Leaf = false;
BuildTree(childNode.Nodes);
}
nodes.Add(childNode);
}
return nodes;
}
页面TreePanl:
<ext:TreePanel ID="tp" runat="server" Header="false" Border="false" AutoScroll="true" Lines="false" CollapseFirst="false" ContainerScroll="true" RootVisible="true"> <Root> <ext:AsyncTreeNode Text="分类目录" NodeID="root" Expanded="true" /> </Root> 动态加载的子节点内容... </ext:TreePanel>
js中红色的那句话把root的ui删了,虽然能解决刷新的问题,但页面写死的那个Root没有了…
求教有没有别的办法让页面刷新时显示 Root节点,或者刷新时不删除Root的UI
Ajax函数: function SendMessage(Page,Value){
try{
XMLHttp = new XMLHttpRequest();
}catch(e){
try{
XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
return null;
}
}
}
var url = Page + "?String1=" + Value + "&sid=" + Math.random();
XMLHttp.onreadystatechange = function(){
switch(XMLHttp.readyState){
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
return(XMLHttp.responseText);
break;
dafault:
break;
}
}
XMLHttp.open("GET",url,true);
XMLHttp.send(null);
}
读取输出:
$(document).ready(function(){
GetWord=SendMessage("http://chamgroup.110mb.com/GetWord.php","");
$("#AddWord").append(GetWord);
});
GetWord.php的代码(服务器端 已上传 位置无误):
<?php
$pf = fopen("data/1.txt","r");
for(;!feof($pf);){
echo fgets($pf);
}
fclose($pf);
?>
按我所理解的,php返回数据,这时候会把http://chamgroup.110mb.com/data/1.txt返回给javascript,然后打印在屏幕上,可是为什么没效果呢?谢谢大家
1、在填写表单时利用blur()对字段进行后台校验(包括AJAX)。
2、按提交按钮后,利用trigger(‘blur’)方法在对每一个字段进行校验(包括AJAX)。
现在的 1 没有问题,2 确没有办法实现
AJAX是异步的。不能得到正确的校验信息。
如果都在success: function (data) {……}里面写又不知道怎么办。
请问有没有什么好办法,或则成熟的代码。
求助
asp.net ajax级联下拉中,取dropdownlist选中的值,并用button事件dropdownlist选中的值进行数据库增加或删除操作时出现回调问题?该怎样处理比较好,请指点思路?有说用隐藏域保存己选中DropDownList的值,请给个实例吧!?
json 查出来的结果是[{"menuRoleId":1,"menu":{"id":1,"parentId":0,"text":"顺嘉商贸有限公司","linkUrl":"","menuRoles":[],"leaf":false,"iconCls":""},"role":{"menuRoles":[],"userRoles":[],"roleName":"超级管理员","roleId":1}},{"menuRoleId":2,"menu":{"id":2,"parentId":1,"text":"通关部","linkUrl":"","menuRoles":[],"leaf":false,"iconCls":"sjsm-treeNodeDepartLeafIcon"},"role":{"menuRoles":[],"userRoles":[],"roleName":"超级管理员","roleId":1}},{"menuRoleId":3,"menu":{"id":3,"parentId":2,"text":"车辆管理","linkUrl":"","menuRoles":[],"leaf":false,"iconCls":"sjsm-treeNodeDepartLeafIcon"},"role":{"menuRoles":[],"userRoles":[],"roleName":"超级管理员","roleId":1}},{"menuRoleId":4,"menu":{"id":4,"parentId":3,"text":"查看车辆状态","linkUrl":"","menuRoles":[],"leaf":true,"iconCls":"sjsm-treeNodeDeptCHLeafIcon"},"role":{"menuRoles":[],"userRoles":[],"roleName":"超级管理员","roleId":1}},{"menuRoleId":5,"menu":{"id":5,"parentId":3,"text":"车辆基本信息","linkUrl":"sjsmfactory/carsManager/carsStatusInfo.jsp","menuRoles":[],"leaf":true,"iconCls":"sjsm-treeNodeDeptCHLeafIcon"},"role":{"menuRoles":[],"userRoles":[],"roleName":"超级管理员","roleId":1}},{"menuRoleId":6,"menu":{"id":6,"parentId":3,"text":"车队基本信息","linkUrl":"sjsmfactory/carsManager/carsBasicInfo.jsp","menuRoles":[],"leaf":true,"iconCls":"sjsm-treeNodeDeptCHLeafIcon"},"role":{"menuRoles":[],"userRoles":[],"roleName":"超级管理员","roleId":1}},{"menuRoleId":7,"menu":{"id":7,"parentId":2,"text":"报关管理","linkUrl":"sjsmfactory/carsManager/carsTeamBasicInfo.jsp","menuRoles":[],"leaf":true,"iconCls":"sjsm-treeNodeDeptCHLeafIcon"},"role":{"menuRoles":[],"userRoles":[],"roleName":"超级管理员","roleId":1}},{"menuRoleId":8,"menu":{"id":8,"parentId":1,"text":"财务部","linkUrl":"","menuRoles":[],"leaf":false,"iconCls":"sjsm-treeNodeDepartLeafIcon"},"role":{"menuRoles":[],"userRoles":[],"roleName":"超级管理员","roleId":1}},{"menuRoleId":9,"menu":{"id":9,"parentId":8,"text":"付款管理","linkUrl":"sjsmfactory/carsManager/carsTeamBasicInfo1.jsp","menuRoles":[],"leaf":true,"iconCls":"sjsm-treeNodeDeptCHLeafIcon"},"role":{"menuRoles":[],"userRoles":[],"roleName":"超级管理员","roleId":1}}]
==================================
两个表Menu,
<set name="menuRoles" inverse="true" lazy="false">
<key>
<column name="menuID" not-null="true" />
</key>
<one-to-many class="com.sj.qh.entity.MenuRole" />
</set>
MenuRole
<many-to-one name="role" class="com.sj.qh.entity.Role" fetch="select" lazy="false">
<column name="ROLE_ID" not-null="true" />
</many-to-one>
<many-to-one name="menu" class="com.sj.qh.entity.Menu" fetch="select" lazy="false">
<column name="menuID" not-null="true" />
</many-to-one>
用extjs库的tree动态加载导航菜单,第一次能加载成功,关闭页面后再次打开就无法加载成功,只能重新启动计算机后,第一次能加载成功,关闭页面后再次打开仍然无法加载成功
前台部分代码如下:
var root = new Ext.tree.AsyncTreeNode({
id : "0",
text : "后台管理系统",
loader : new Ext.tree.TreeLoader({
url : "Data/Main.aspx",
listeners : {
"beforeload" : function(treeloader, node) {
treeloader.baseParams = {
id : node.id,
method : ‘POST’
};
}
}
})
});
// 创建树型面板
var menu = new Ext.tree.TreePanel({
id : "treePanel",
autoScroll : true,
animate : true,
root : root,
// 默认根目录不显示
rootVisible : false,
border : false,
animate : true,
lines : true,
enableDD : true,
containerScroll : true,
listeners : {
click : nodeClick
}
});
// 加载时自动展开根节点
menu.expandAll();
后台部分代码如下:
public partial class AdminMain : System.Web.UI.Page
{
public string jsons = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
GetTreeData();
Response.Write(jsons);
}
/// <summary>
/// 获得树信息
/// </summary>
/// <param name="parentId"></param>
/// <returns></returns>
private void GetTreeData()
{
string id = Request.Form["id"];
jsons = ListToJson(id);
}
private string ListToJson(string id)
{
string jsons = "";
IList<SysFun> list = new List<SysFun>();
List<TreeHelper> treeList = new List<TreeHelper>();
if (Session["admin"] != null)
{
string admin = Session["admin"].ToString();
int roleId = UserInfoManager.GetUserInfoByUserId(admin).UserRole.RoleId;
if (id == null)
{
list = SysFunManager.GetAllSysFunsByRoleId(roleId, 0);
foreach (SysFun sf in list)
{
TreeHelper th = new TreeHelper();
th.id = sf.NodeId.ToString();
th.leaf = SysFunManager.SysFunIsLeaf(sf.NodeId);
th.iconCls = "icon" + sf.NodeId;
th.text = sf.DisplayName;
treeList.Add(th);
}
}
else if (id != null)
{
int parentId = int.Parse(id);
list = SysFunManager.GetAllSysFunsByRoleId(roleId, parentId);
foreach (SysFun sf in list)
{
TreeHelper th = new TreeHelper();
th.id = sf.NodeId.ToString();
th.leaf = SysFunManager.SysFunIsLeaf(sf.NodeId);
if (parentId == 0)
{
th.iconCls = "icon" + sf.NodeId;
}
else
{
th.iconCls = "menuicon";
}
th.text = sf.DisplayName;
treeList.Add(th);
}
}
else
{
jsons = "{success:false}";
}
jsons = JsonHelper.ToJSON(treeList);
}
else
{
jsons = "{success:false}";
}
return jsons;
}
}
如题,就是有新信息来的时候,会插入到信息栏的第一行,下面的内容会滑动。这个客户端是怎么实现的?
我用window.showModalDialog显示一个页面,在这个新页面中我用window.createPopup()的show方法显示一个模式窗口,但是显示不出来,直接打开window.showModalDialog显示的页面就可以打开window.createPopup()的show方法显示的页面,这是怎么回事啊?
本本没有自带iis,在系统管理工具里没有internet information service IIS管理,我从程序里打开windows 把IIS相关内容全部安装后,仍然在系统管理工具里看不到IIS管理,请问如何安装呢?想要使用虚拟网站功能啊。
请大家帮个忙,我想做个PHP+Ajax聊天,但是卡住了,不知道哪里错了
chat.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>chat</title> <script type="text/javascript" src="ajax.js"></script> </head> <body onload="send()"> <form id="form1" name="form1" method="post" action="#"> <label> <textarea name="show" cols="50" rows="10" id="show"></textarea> <br /> <textarea name="input" cols="50" rows="5" id="input"></textarea> <br /> </label> <label></label> <label> <input type="submit" name="button" id="button" value="提交" onclick="sendRequest()" /> </label> <label> <input name="name" type="text" id="name" value="f" /> </label> </form> </body> </html>
ajax.js
function createXMLHttpRequest() { if(window.XMLHttpRequest) {XMLHttpReq = new XMLHttpRequest();} else if (window.ActiveXObject) { try {XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) { try {XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {}}}} //发送请求函数 function sendRequest() { createXMLHttpRequest(); var url = 'chat.php?'; thing="input="+document.getElementById("input").value+"&name="+document.getElementById("name").value; url=url+thing; XMLHttpReq.open("GET",url,true); XMLHttpReq.onreadystatechange = processResponse;//指定响应函数 XMLHttpReq.send(null); //循环setTimeout("sendRequest()",2000); } // 处理返回信息函数 function processResponse() { if (XMLHttpReq.readyState == 4) { // 判断对象状态 if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息 var message=XMLHttpReq.responseText; document.getElementById("show")=document.getElementById("show")+message; } else {alert("您所请求的页面有异常。");}}} function send() { createXMLHttpRequest(); XMLHttpReq.open("GET","chat.php",true); XMLHttpReq.onreadystatechange = processResponse;//指定响应函数 XMLHttpReq.send(null); setTimeout("send()",2000); }
chat.php
<?php if(isset($_REQUEST['name'])&&isset($_REQUEST['input'])){ $i=$_REQUEST['name']; $n=$_REQUEST['input']; $con=mysql_connect("localhost","name","pass") or die("error:".mysql_error()); mysql_select_db("chat", $con); $val=mysql_query("INSERT INTO chat (n,m) VALUES ('$i','$n'"); $result=mysql_query("SELECT * FROM chat"); while($r=mysql_fetch_array($result)){ echo $r['n'].":<br/>".$r['m']."<br/>"; } } else{echo "adf"; $con=mysql_connect("localhost","xl","xl") or die("error:".mysql_error()); mysql_select_db("chat", $con); $result=mysql_query("SELECT * FROM chat"); while($r=mysql_fetch_array($result)){ echo $r['n'].":<br/>".$r['m']."<br/>"; }} ?>
chat.php中要该数据库账户密码和数据库名
数据库中有两个字段n与m,UTF-8编码,text类型
chat.html中三个输入框分别是显示框,输入框,名字,请大家帮忙看看,谢了。
在同一个js文件中,有时,我们会在不同的地方中使用相同的ID,如:userid,这样,会造成,当我们使用
Ext.getCmp("userid")赋值等相关操作时,会引起混乱。
当然,最简单的解决此类问题的方式是,不要取相同名的ID,比如,A处用了"userid"了,那么,在B处就要换为"userid2"
这样冲突问题倒是解决了,但这样总感觉解决得不是很优雅,不知,各位Ext高人,有何更高明的解决方法不?