Struts2配pager_taget实现分页

本文介绍了在OA项目中遇到的分页问题及解决方法,并探讨了filter与interceptor的区别与联系,包括它们在Struts框架中的工作流程。
[size=large] 今天在跟着视频做OA项目做到分页这一块,原本老师是先在经过一个filter,在pagerfilter中对offset进行获取从而设置到threadlocal里面,然后在转到action,进行相应的操作。但是在定义的OrgAction中没有offset这个属性,从而就会出错,所以要在action中定义一个Pager pager,Pager对象中有offset这个属性即可,虽然有点鸡肋,但是没想到到有什么好的办法,当然也可以屏蔽struts的错误。
第二点,就是对filter和interceptor的理解,网站找的,感觉比较符合自己的想法。
任何通过Struts,或是JSF的Controller Servlet处理的request,都会在过滤器中先行处理(filter),才把控制权交还给Struts或是JSF,这时interceptor才起作用。注意这个顺序使用一种通俗的方式来讲是:filter在进入网页时选择,interceptor在提交业务过程中进行拦截,来加入需要的另外加入的业务逻辑。
也就是说interceptor只能过滤请求,而且是不依赖于servlet容器的。
最后,Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
[/size]
路径已经找到! 函数或变量 'D' 无法识别。 出错 fivespline (第 52 行) P(i,:) = N * D(idx_start:idx_start+k, :); 出错 mainrrt (第 63 行) new_Path = fivespline(mypos_iter, rSave, circleCenterSave, source, goal); % 调用修改后的五次B样条函数 new_Path = fivespline(mypos_iter, rSave, circleCenterSave, source, goal); % 后续逆运动学计算保持不变 n = length(new_Path); a=zeros(4,4,n); for num1=1:n x_taget = new_Path(n+1-num1,1); y_taget = new_Path(n+1-num1,2); z_taget = new_Path(n+1-num1,3); a(1,1,num1)=1; a(2,2,num1)=-1; a(3,3,num1)=1; a(1,4,num1)=x_taget; a(2,4,num1)=y_taget; a(3,4,num1)=z_taget; a(4,4,num1)=1; end q=PUMA.ikunc(a); figure(2) PUMA.plot(q); figure(3) plot(q); legend('关节1','关节2','关节3','关节4','关节5','关节6'); xlabel('t/s'); ylabel('关节值'); function P = fivespline(Pp, radius, circleCenter, start, goal) pt = Pp; % 可视化部分保持不变... [row, column] = size(pt); n = size(pt, 1); % 型值点数量 k = 5; % 五次样条 % === 1. 参数检查 === if n < 6 error('五次B样条需要至少6个型值点'); end % === 2. 积累弦长参数化 === if column == 2 % 2D dists = sqrt(diff(pt(:,1)).^2 + diff(pt(:,2)).^2); else % 3D dists = sqrt(diff(pt(:,1)).^2 + diff(pt(:,2)).^2 + diff(pt(:,3)).^2); end total_length = sum(dists); cum_dists = [0; cumsum(dists)/total_length]; % 归一化累积距离 % === 3. 构建节点矢量 === U = zeros(1, n + k + 1); % 节点矢量长度 = n + k + 1 U(1:k+1) = 0; % 起始重复度 k+1 U(end-k:end) = 1; % 结束重复度 k+1 % 内节点赋值(关键修正) num_inner_nodes = n - k; % 需要的内节点数量 if num_inner_nodes > 0 % 从累积距离中提取内节点(避开首尾点) inner_indices = round(linspace(2, numel(cum_dists)-1, num_inner_nodes)); U(k+2:k+1+num_inner_nodes) = cum_dists(inner_indices); end % 确保节点矢量单调递增 U = sort(U); % === 4. 反算控制点 === % ...(保持之前提供的控制点计算代码不变)... % === 5. 生成曲线 === dt = 0.01; t = 0:dt:1; P = zeros(numel(t), column); for i = 1:numel(t) u = t(i); span = find_span(u, U, n+k-1, k); % 找到节点区间 N = basis_funs(span, u, k, U); % 计算基函数 idx_start = span - k; P(i,:) = N * D(idx_start:idx_start+k, :); end % 可视化部分保持不变... end % 辅助函数:find_span(保持不变) function span = find_span(u, U, n, p) if u >= U(n+2), span = n+1; return; end if u <= U(p+1), span = p+1; return; end low = p+1; high = n+2; while high > low + 1 mid = floor((low+high)/2); if u < U(mid) high = mid; else low = mid; end end span = low; end % 辅助函数:basis_funs(保持不变) function N = basis_funs(span, u, p, U) N = zeros(1, p+1); left = zeros(1, p+1); right = zeros(1, p+1); N(1) = 1; for j = 1:p left(j+1) = u - U(span+1-j); right(j+1) = U(span+j) - u; saved = 0; for r = 0:j-1 temp = N(r+1)/(right(r+2) + left(j-r+1)); N(r+1) = saved + right(r+2)*temp; saved = left(j-r+1)*temp; end N(j+1) = saved; end end
12-15
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值