- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在结合使用 TabView 和 TreeTable 保存 View 状态期间,我遇到了 java.lang.IndexOutOfBoundsException
。 我有一个 TreeNodes 列表,我为每个节点创建了一个 TreeTable。每个 p:treeTable 都在一个复合组件中,而复合组件又包含在 p:tab 中。树表的某些列具有 p:input 元素,我正在使用 p:ajax 处理值并使用“p:ajax”的 primefaces“更新”属性更新一些 dom 对象。对于索引 > 0 的树节点树表,当为索引大于第一个树节点(索引 = 0)大小的任何行触发 ajax 时,我收到以下错误:
java.lang.IndexOutOfBoundsException: Index: 19, Size: 4
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at org.primefaces.component.api.UITree.findTreeNode(UITree.java:121)
at org.primefaces.component.api.UITree.setRowKey(UITree.java:80)
at org.primefaces.component.api.UITree.visitTree(UITree.java:417)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:163)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIForm.visitTree(UIForm.java:362)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at org.primefaces.component.api.UIData.visitRows(UIData.java:748)
at org.primefaces.component.api.UIData.visitTree(UIData.java:654)
at org.primefaces.component.tabview.TabView.visitTree(TabView.java:433)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:163)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at org.primefaces.component.accordionpanel.AccordionPanel.visitTree(AccordionPanel.java:395)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:163)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at com.sun.faces.application.view.FaceletPartialStateManagementStrategy.saveView(FaceletPartialStateManagementStrategy.java:473)
at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:89)
at javax.faces.application.StateManager.getViewState(StateManager.java:553)
at com.sun.faces.context.PartialViewContextImpl.renderState(PartialViewContextImpl.java:418)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:301)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:982)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:411)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Aug 21, 2013 11:43:44 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/igamt-ui] threw exception
java.lang.IllegalStateException: CDATA tags may not nest
at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.startCDATA(HtmlResponseWriter.java:664)
at javax.faces.context.ResponseWriterWrapper.startCDATA(ResponseWriterWrapper.java:172)
at javax.faces.context.PartialResponseWriter.startError(PartialResponseWriter.java:342)
at org.primefaces.context.PrimePartialResponseWriter.startError(PrimePartialResponseWriter.java:155)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:200)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:124)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
似乎 p:ajax 总是引用第一个树节点(索引 =0),其大小(子节点数)为 4。
Here is my composite component: treeTableComponent.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:myComponents="http://java.sun.com/jsf/composite/myComponents">
<composite:interface>
<composite:attribute name="managerBean" required="true" />
<composite:attribute name="node" required="true" />
</composite:interface>
<composite:implementation>
<div id="#{cc.id}">
<ui:param name="currentNode" value="#{cc.attrs.node}" />
<p:treeTable resizableColumns="true" value="#{currentNode}"
id="segmentmaker_segment_tree" var="nodeData"
scrollable="true">
<p:ajax event="collapse" global="true"
listener="#{cc.attrs.managerBean.onNodeCollapse}" process="@this" />
<p:ajax event="expand" global="true"
listener="#{cc.attrs.managerBean.onNodeExpand}" process="@this" />
<p:column style="width:100px"
headerText="Column A">
<p:outputPanel layout="block">
<p:outputPanel id="column_a">
<p:inputText
value="#{nodeData.a}" size="5"
required="false">
<p:ajax event="blur" partialSubmit="true"
update="column_a column_b"
global="true" async="true"
listener="#{cc.attrs.managerBean.process}">
</p:ajax>
</p:inputText>
</p:outputPanel>
</p:outputPanel>
</p:column>
<p:column style="width:100px"
headerText="Column B">
<p:outputPanel id="column_b">
<p:inputText
value="#{nodeData.b}" size="5"
required="false">
<p:ajax event="blur" partialSubmit="true"
update="column_a column_b"
global="true" async="true"
listener="#{cc.attrs.managerBean.process}">
</p:ajax>
</p:inputText>
</p:outputPanel>
</p:outputPanel>
</p:column>
</p:treeTable>
</div>
</composite:implementation>
</ui:composition>
这是我的支持 bean:ManagerBean.java
public class ManagerBean implements Serializable {
public ManagerBean(){
nodes = new ArrayList<TreeNode>();
nodes.add(new DefaultTreeNode("one", new DataModel("one"), null));
nodes.add(new DefaultTreeNode("two", new DataModel("two"), null));
nodes.add(new DefaultTreeNode("three", new DataModel("three"), null));
nodes.add(new DefaultTreeNode("four", new DataModel("four"), null));
//add childrens
for(int i = 0; i < nodes.size(); i++){
for(int j = 0; j < 10; i++){
new DefaultTreeNode("one"+(j+1), new DataModel("one"+(j+1)), nodes.get(i);
}
}
}
private List<TreeNode> nodes = null;
public void process(AjaxBehaviorEvent event) {
try {
FacesContext context = FacesContext.getCurrentInstance();
DataModel currentSegmentChildModel =
context.getApplication().evaluateExpressionGet(context, "#{nodeData}",
DataModel.class);
TreeNode node =
context.getApplication().evaluateExpressionGet(context, "#{currentNode}",
EditorTreeNode.class);
//business logic
} catch (ValidationException e) {}
}
public void onNodeExpand(NodeExpandEvent event) {
event.getTreeNode().setExpanded(true);
}
public void onNodeCollapse(NodeCollapseEvent event) {
event.getTreeNode().setExpanded(false);
}
}
这里是客户端调用 treeTableComponent 复合组件。客户端本身就是一个复合组件:treeTableComponents.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:myComponents="http://java.sun.com/jsf/composite/myComponents">
<composite:interface>
<composite:attribute name="managerBean" required="true" />
</composite:interface>
<composite:implementation>
<div id="#{cc.id}">
<p:tabView
cache="true" dynamic="true" var="myNode"
value="#{cc.attrs.managerBean.nodes}">
<p:tab header="#{myNode.name}">
<h:form prependId="false">
<p:outputPanel layout="block">
<myComponents:treeTableComponent
node="#{myNode}"
managerBean="#{cc.attrs.managerBean}" />
</p:outputPanel>
</h:form>
</p:tab>
</p:tabView>
</div>
</composite:implementation>
</ui:composition>
这里是数据模型代码:DataModel.java
public class DataModel implements Serializable {
private String a;
private String b;
public String getA(){
return a;
}
public String getB(){
return b;
}
public void setA(String a){
this.a = a;
}
public void setB(String b){
this.b = b;
}
}
我正在使用 PrimeFaces 3.5 和 Mojarra 2.1.17。
最佳答案
您好,这是 primefaces 中的一个错误,似乎尚未修复 https://code.google.com/p/primefaces/issues/detail?id=5255
对我有帮助的是在更改我的 Action 函数中的节点后重置这三个
// update/remove etc nodes
super.initTree(user);
// find the UITree component
List<UIComponent> findComponent2 = Utils.findComponent("tree");
Tree uiComponent = (Tree) findComponent2.get(1);
// reset tree
uiComponent.setRowKey(null);
我的查找函数看起来像那样,但我认为使用绑定(bind)变量要好得多...这只是我的第一次尝试
public static List<UIComponent> findComponent(final String id) {
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root = context.getViewRoot();
final List<UIComponent> result = new ArrayList<>();
try {
root.visitTree(new FullVisitContext(context), new VisitCallback() {
@Override
public VisitResult visit(VisitContext context, UIComponent component) {
if (component.getId().toLowerCase().contains(id)) {
result.add(component);
}
return VisitResult.ACCEPT;
}
});
} catch (Exception e) {
}
return result;
}
关于jsf-2 - 在复合组件的 TabView 中使用 PrimeFaces treeTable 时保存 View 状态期间出现 java.lang.IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18363146/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!