- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在我正在从 primefaces 迁移3.5 至 4.0。
我正在使用递归方法创建这棵树并从数据库中检索该树。
使用 3.5 时,这按预期工作。但是当迁移到primefaces时4,我无法使用 hibernate jpa 进行编辑/合并。该错误仅出现在 glassfish 控制台 java.lang.NumberFormatException: For input string: "null"。
看看我的实体:
@Entity
@Table(schema = "public", name = "menu")
@XmlRootElement
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(nullable = false)
private Integer menuid;
@Size(max = 100)
@Column(length = 100)
private String menuname;
private Integer parentid;
private Integer level;
private Integer ordering;
@Temporal(TemporalType.DATE)
private Date sessiondate;
@Size(max = 15)
@Column(length = 15)
private String action;
@Size(max = 15)
@Column(length = 15)
private String menutype;
@Column(name = "icon")
private String icon;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "parentid")
@OrderBy(value = "ordering")
private List<Menu> children = new LinkedList<>();
//appropriate getter setter
}
以及我创建递归的方法:
public void generateMenuTree() throws SQLException {
// findUserConfirmationDefault root menu
rootMenu = menuFacadeLocal.findHomeMenu();
//recursively createUserConfirmationDefault tree menu
menuTree = createTree(rootMenu, null);
}
public TreeNode createTree(Menu menu, TreeNode rootNode) throws SQLException {
TreeNode newNode = new DefaultTreeNode(menu, rootNode);
for (Menu subMenu : menu.getChildren()) {
if (("mm").equalsIgnoreCase(subMenu.getMenutype())) {
TreeNode newNode2 = createTree(subMenu, newNode);
}
}
return newNode;
}
我使用以下方式显示了树:
<p:tab title="Access Menus">
<p:tree value="#{managePositionBean.menuTree}" var="menutree" selectionMode="checkbox" selection="#{managePositionBean.selectedTreeMenu}" animate="true">
<p:treeNode icon="#{menutree.icon}">
<h:outputText value="#{msgs[menutree.menuname]}"/>
</p:treeNode>
</p:tree>
唯一可以null
的东西就是#{menutree.icon}
。
啊是的,堆栈跟踪:
INFO: java.lang.NumberFormatException: For input string: "null"
java.lang.NumberFormatException: For input string: "null"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at org.primefaces.component.api.UITree.findTreeNode(UITree.java:156)
at org.primefaces.component.api.UITree.setRowKey(UITree.java:87)
at org.primefaces.component.tree.TreeRenderer.decodeSelection(TreeRenderer.java:86)
at org.primefaces.component.tree.TreeRenderer.decode(TreeRenderer.java:56)
at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)
at org.primefaces.component.api.UITree.processDecodes(UITree.java:294)
at org.primefaces.component.tree.Tree.processDecodes(Tree.java:370)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
at org.primefaces.util.ComponentUtils.processDecodesOfFacetsAndChilds(ComponentUtils.java:414)
at org.primefaces.component.tabview.TabView.processDecodes(TabView.java:325)
at javax.faces.component.UIForm.processDecodes(UIForm.java:225)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIForm.visitTree(UIForm.java:354)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:57)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.omnifaces.facesviews.FacesViewsForwardingFilter.doFilter(FacesViewsForwardingFilter.java:121)
at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.omnifaces.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:115)
at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.omnifaces.filter.GzipResponseFilter.doFilter(GzipResponseFilter.java:148)
at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at ch.qos.logback.classic.helpers.MDCInsertingServletFilter.doFilter(MDCInsertingServletFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:744)
我什至删除了显示的图标,但仍然不起作用..
我的环境是 JEE 7
、Mojarra 2.1.24
、Glassfish 3.1.2.2
、Primefaces 3.5
、 Primefaces 扩展 1.0
、Omnifaces 1.5
。
我很困惑,问题是什么,是primefaces、mojarra还是其他地方的bug,还是只有我一个人?
谢谢。
更新
也许我认为我发现了问题,在我用 firebug
检查生成的 html
后,我发现这个输入隐藏
就在树下。看来里面的值是被选择的 id 组件。当我勾选并取消勾选某些树节点后,其中的值会填充或消失。
<input type="hidden" id="Position:tView:j_idt110_selection" name="Position:tView:j_idt110_selection" value="null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,0,0_0,0_1,0_2,0_3,0_4,0_5,4,4_0,4_1,4_2,6,6_0,6_0_0,6_0_1,6_0_2,6_0_3,6_0_4,6_1,6_1_0,6_1_0_0,6_1_0_1,6_1_0_2,6_1_0_3,6_1_0_4,6_1_0_5,6_1_0_6,6_1_1,6_1_2,6_1_3,6_1_4,6_1_5,6_1_6,6_1_7,6_1_8,6_1_9,6_1_10,6_1_11,6_1_12,6_1_13,6_1_14,6_1_15,6_1_16,6_1_17,6_2,6_2_0,6_2_0_0,6_2_0_1,6_2_1,6_2_2,6_2_3,6_2_4,6_2_5,6_2_6,6_2_6_0,6_2_6_1,6_2_6_2,6_2_7,6_3,6_3_0,6_3_1,6_3_2,6_4,6_4_0,6_4_1,6_4_2,6_4_3,6_4_3_0,6_4_3_1,6_4_3_2,1,1_0,1_0_0,1_0_1,1_0_2,1_1,1_1_0,1_1_1,1_1_2,1_1_3,2,2_0,2_0_0,2_0_1,2_0_2,2_0_3,2_0_4,2_0_5,2_1,2_1_0,2_1_1,2_1_2,2_1_3,2_1_4,2_1_5,2_1_6,2_1_7,2_2,3,3_0,3_1,3_2,3_3,3_3_0,3_3_1,5,5_0,5_0_0,5_0_1,5_0_2,5_0_3,5_0_4,5_0_5,5_1,5_1_0,5_1_1,5_1_2,5_1_3,5_1_4,5_1_5,5_2,5_2_0,5_2_1,5_2_2,5_2_3,5_2_4,5_3,5_3_0,5_3_1,5_3_2,5_3_3,5_3_4,5_3_5,5_3_6,5_4">
我将展示我的编辑方法:
public void editingPosition(final Position pList) {
position = pList;
List<PrivilageuserDefault> defaults = privilageuserDefaultFacadeLocal.findPrivilageuserDefaultByPositionid(position.getPositionid());
positionPrivilegesMap = privilageuserDefaultFacadeLocal.searchMapPrivilegeUserDefault(position.getPositionid());
if (!defaults.isEmpty()) {
PrivilageuserDefault[] arrayOfPositionPrivileges = defaults.toArray(new PrivilageuserDefault[defaults.size()]);
int i = 0;
// this.selectedTreeMenu = new TreeNode[defaults.size()]; --> commented on 2nd update
for (PrivilageuserDefault pd : arrayOfPositionPrivileges) {
// TreeNode node = new DefaultTreeNode(pd.getMenu(), null); --> commented on 2nd update
// this.selectedTreeMenu[i] = node; --> commented on 2nd update
i++;
}
checkTreeNodes(menuTree);
}
status = 2;
}
这适用于勾选树(如果存在):
private void checkTreeNodes(TreeNode root) {
if (root.getChildCount() > 0) {
for (TreeNode children : root.getChildren()) {
Menu menu = (Menu) children.getData();
if (positionPrivilegesMap.containsKey(menu.getMenuid())) {
children.setSelected(true);
}
// recursive check
checkTreeNodes(children);
}
}
}
我认为,我在关于勾选/取消勾选树的 CRUD 概念中做错了,或者我错过了一些步骤。
更新
是的,我是对的,上面输入隐藏的 null
值是 selectedTreeMenu 变量是罪魁祸首。在我注释填充 selectedTreeMenu 的行之后(我已经更新了上面片段上的注释行),现在我可以从数据库中检索数据并且树上选定的节点已被勾选。但是,在我立即更新所选树而不勾选/取消勾选所选节点后,它成功更新,但所选节点未更新/插入到数据库/删除。所以这是对的,这还不够
children.setSelected(true);
看来selectedTree变量也必须填写,但是如何正确填写呢? :/
最佳答案
最后,我找到了一些解决方法,快速补丁。我创建了新的 List
变量
private List<TreeNode> selectedTreeList;
并用节点填充它
private void checkTreeNodes(TreeNode root) {
if (root.getChildCount() > 0) {
for (TreeNode children : root.getChildren()) {
Menu menu = (Menu) children.getData();
if (positionPrivilegesMap.containsKey(menu.getMenuid())) {
children.setSelected(true);
expand(children);
selectedTreeList.add(children); // --> filled with this
}
// recursive check
checkTreeNodes(children);
}
}
}
在显示给 UI 之前,我将节点的 List
更改为 Array
selectedTreeMenu = selectedTreeList.toArray(selectedTreeMenu);
瞧!
关于编辑 Primefaces 递归树时出现 java.lang.NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19926218/
在本教程中,您将借助示例了解 JavaScript 中的递归。 递归是一个调用自身的过程。调用自身的函数称为递归函数。 递归函数的语法是: function recurse() {
我的类(class) MyClass 中有这段代码: public new MyClass this[int index] { get {
我目前有一个非常大的网站,大小约为 5GB,包含 60,000 个文件。当前主机在帮助我将站点转移到新主机方面并没有做太多事情,我想的是在我的新主机上制作一个简单的脚本以 FTP 到旧主机并下载整个
以下是我对 AP 计算机科学问题的改编。书上说应该打印00100123我认为它应该打印 0010012但下面的代码实际上打印了 3132123 这是怎么回事?而且它似乎没有任何停止条件?! publi
fun fact(x: Int): Int{ tailrec fun factTail(y: Int, z: Int): Int{ if (y == 0) return z
我正在尝试用c语言递归地创建线性链表,但继续坚持下去,代码无法正常工作,并出现错误“链接器工具错误 LNK2019”。可悲的是我不明白发生了什么事。这是我的代码。 感谢您提前提供的大力帮助。 #inc
我正在练习递归。从概念上讲,我理解这应该如何工作(见下文),但我的代码不起作用。 请告诉我我做错了什么。并请解释您的代码的每个步骤及其工作原理。清晰的解释比只给我有效的代码要好十倍。 /* b
我有一个 ajax 调用,我想在完成解析并将结果动画化到页面中后调用它。这就是我陷入困境的地方。 我能记忆起这个功能,但它似乎没有考虑到动画的延迟。即控制台不断以疯狂的速度输出值。 我认为 setIn
有人愿意用通俗易懂的语言逐步解释这个程序(取自书籍教程)以帮助我理解递归吗? var reverseArray = function(x,indx,str) { return indx == 0 ?
目标是找出数组中整数的任意组合是否等于数组中的最大整数。 function ArrayAdditionI(arr) { arr.sort(function(a,b){ return a -
我在尝试获取 SQL 查询所需的所有数据时遇到一些重大问题。我对查询还很陌生,所以我会尽力尽可能地描述这一点。 我正在尝试使用 Wordpress 插件 NextGen Gallery 进行交叉查询。
虽然网上有很多关于递归的信息,但我还没有找到任何可以应用于我的问题的信息。我对编程还是很陌生,所以如果我的问题很微不足道,请原谅。 感谢您的帮助:) 这就是我想要的结果: listVariations
我一整天都在为以下问题而苦苦挣扎。我一开始就有问题。我不知道如何使用递归来解决这个特定问题。我将非常感谢您的帮助,因为我的期末考试还有几天。干杯 假设有一个包含“n”个元素的整数数组“a”。编写递归函
我有这个问题我想创建一个递归函数来计算所有可能的数字 (k>0),加上数字 1 或 2。数字 2 的示例我有两个可能性。 2 = 1+1 和 2 = 2 ,对于数字 3 两个 poss。 3 = 1+
目录 递归的基础 递归的底层实现(不是重点) 递归的应用场景 编程中 两种解决问题的思维 自下而上(Bottom-Up) 自上而下(Top-
0. 学习目标 递归函数是直接调用自己或通过一系列语句间接调用自己的函数。递归在程序设计有着举足轻重的作用,在很多情况下,借助递归可以优雅的解决问题。本节主要介绍递归的基本概念以及如何构建递归程序。
我有一个问题一直困扰着我,希望有人能提供帮助。我认为它可能必须通过递归和/或排列来解决,但我不是一个足够好的 (PHP) 程序员。 $map[] = array("0", "1", "2", "3")
我有数据 library(dplyr, warn.conflicts = FALSE) mtcars %>% as_tibble() %>% select(mpg, qsec) %>% h
在 q 中,over 的常见插图运算符(operator) /是 implementation of fibonacci sequence 10 {x,sum -2#x}/ 1 1 这确实打印了前 1
我试图理解以下代码片段中的递归调用。 static long fib(int n) { return n <= 1 ? n : fib(n-1) + fib(n-2); } 哪个函数调用首先被
我是一名优秀的程序员,十分优秀!