gpt4 book ai didi

Java getParent 返回 null

转载 作者:行者123 更新时间:2023-12-01 14:40:49 29 4
gpt4 key购买 nike

我对 Java 还很陌生,所以请耐心等待。我有一个类,它必须获取页面的父级并返回它。当我导航到节点的最顶部时,我得到一个空指针异常,即读取 for(Page page = to........) 的行,我明白为什么,因为在顶部节点没有父节点。如何防止我的代码生成错误并在用户导航到顶级节点时优雅地显示一条消息。

类代码:

public class Pages {
public static List<Page> getPath(Page from, Page to) {
if (from == null || to == null) throw new IllegalArgumentException();

List<Page> path = new ArrayList<Page>();
for (Page page = to.getParent(), last = from.getParent(); page != null && !(page.getPath().equals(last.getPath())); page = page.getParent())
path.add(page);
Collections.reverse(path);
return path.contains(from) ? path : null;
}

}

JSP代码:

Page rootPage = resourceResolver.adaptTo(PageManager.class).getPage(properties.get("rootNode",Page)currentPage).getPath()));
List<Page> listPages = Pages.getPath(rootPage, currentPage);

for (Page showContent : listPages) {
%>
<li><a href="#">listPages.getDisplayTitle(showContent)) %></a></li>
<%
} //end page for loop

最佳答案

既然您请求了示例:

public class Pages {
public static List<Page> getPath(Page from, Page to) {
if (from == null || to == null) throw new IllegalArgumentException();

List<Page> path = new ArrayList<Page>();
Page page=to.getParent();
Page last=from.getParent();
// I'm assuming getPath() can be null occassionaly and is a String
String lastPath;
if(last!=null && (lastPath=last.getPath())!=null){
// The assignment above is an acceptable one, as it saves a nested if statement
// traverse your path
while(page!=null && page.getPath()!=null && !(page.getPath().equals(lastPath))) {
path.add(page);
page=page.getParent();
}
}
Collections.reverse(path);
return path.contains(from) ? path : null;
}

值得注意的是,如果您为“from”或“to”参数输入“null”,这段代码仍然可能会破坏您的页面,因为在这种情况下您会抛出一个新的 IllegalArgumentException。我更喜欢在实际的 java 后端处理尽可能多的逻辑和错误处理,并在 jsp 前端处理尽可能少的逻辑和错误处理。一个可能的改进可能是,如果存在无效参数,则仅返回一个空列表。

public class Pages {
public static List<Page> getPath(Page from, Page to) {
if (from == null || to == null) return new ArrayList<Page>();

List<Page> path = new ArrayList<Page>();
Page page=to.getParent();
Page last=from.getParent();
// I'm assuming getPath() can be null occassionaly and is a String
String lastPath;
if(last!=null && (lastPath=last.getPath())!=null){
// The assignment above is an acceptable one, as it saves a nested if statement
// traverse your path
while(page!=null && page.getPath()!=null && !(page.getPath().equals(lastPath))){
path.add(page);
page=page.getParent();
}
}
Collections.reverse(path);
return path;//return path or empty list
}

有了这个改进,您就不会再遇到任何异常了。在前端,您现在只需检查列表是否为空并采取相应措施

*旁注 1:* 我不太确定在什么情况下您想要将“from”添加到路径中(所以我将其保留out),因此您可能需要将其添加到提供的代码中。

*旁注 2:*您可能想考虑使用 EL 而不是 scriptlet,只是一个想法:)

关于Java getParent 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15981798/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com