通过toPo()时的验证判断

 
验证时的方法:
if (hasErrors()) {
              form.set("id", null);
              return forward("edit");
          }
toPo()会返回一个验证的结果,就是hasErrors()
我们要来判断这个结果才行,有错就返回true,就执行if()里面的代码:重新返回到提交的页面上去
 
如下例子:
 public Page doSave(WebForm form) {
  String id = CommUtil.null2String(form.get("id"));
//  不为空时表明是回复
  if (id != "") {
   Message message = form.toPo(Message.class);
   if (hasErrors()) {
    form.set("id", null);
    return forward("edit");
   }
   this.service.addReply(new Long(id), message);
  } else {
   Message message = form.toPo(Message.class);
   message.setVdate(new Date());
   message.setIp(ActionContext.getContext().getRequest()
     .getRemoteAddr());
   if (hasErrors()) {
    form.set("id", null);
    return forward("edit");
   }
   service.addMessage(message);
  }
  return go("list");
 
就是
if(){
   回复
}else{
   留言
}
### 使用拓扑排序检测图中是否存在环 #### 方法概述 对于有向图而言,可以通过构建其拓扑有序序列来验证是否存在回路。当且仅当所有顶点都能加入到这个线性排列里,说明原网络不含任何闭合路径;反之则意味着存在至少一条循环边。 #### 实现方式之一:基于Kahn算法(广度优先) 这种方法依赖于不断寻找并移除当前入度为零的节点直到无法继续为止: 1. 初始化一个队列用于存储所有初始状态下入度等于0 的节点; 2. 对这些起始位置执行如下操作直至结束: - 取出队首元素作为处理对象; - 将它标记为已访问并将之添加至结果列表末端; - 遍历由该节点指向的所有邻接点,并对其各自的入度计数器减去1; 若某相邻节点因此变为新的候选起点(即入度降为0),立即将其压入待处理集合内。 3. 如果最终得到的结果集大小恰好匹配输入数据中的总节点数目,则表明整个过程顺利完成而未遇到阻碍——亦即不存在任何形式上的闭环结构[^3]。 ```python from collections import deque, defaultdict def topological_sort_kahn(graph): indegree = {u: 0 for u in graph} for edges in graph.values(): for v in edges: indegree[v] += 1 queue = deque([node for node in indegree if indegree[node] == 0]) ordered_nodes = [] while queue: current_node = queue.popleft() ordered_nodes.append(current_node) for neighbor in graph[current_node]: indegree[neighbor] -= 1 if indegree[neighbor] == 0: queue.append(neighbor) return len(ordered_nodes) == len(graph), ordered_nodes ``` #### 实现方式之二:基于深度优先搜索 (DFS) 另一种常见的策略是从任意一点出发沿最深方向探索整棵树,在回溯阶段记录下每个分支顶端的位置形成逆序链表。一旦发现某个子树根部再次出现在后续遍历便构成了自相交现象从而揭示了隐藏其中的一个或多个月牙形圈套。 具体做法是在递归调用栈上附加额外的状态位以追踪正在考察范围内的活动成员名单。每当触及尚未登记过的站点立即注册成为临居民;离开前记得注销身份以免造成误会。期间若察觉有人试图重返故地即刻触发警报提示异常情况的发生[^1]。 ```python def dfs_topo_sort_and_cycle_detection(adj_list): visited = set() # 已经完全访问过 visiting = set() # 正在访问中 topo_order = [] def visit(node): if node in visiting: raise ValueError("Cycle detected!") if node not in visited: visiting.add(node) try: for child in adj_list.get(node, []): visit(child) visiting.remove(node) visited.add(node) topo_order.insert(0,node) except Exception as e: raise nodes = list(adj_list.keys()) for n in nodes: visit(n) has_no_cycles = True try: _ = topo_order except ValueError: has_no_cycles = False return has_no_cycles, topo_order[::-1] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值