내 xhtml 페이지 :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jstl/core"
>
<h:head>
<!-- <h:outputStylesheet library="css" name="table-style.css" /> -->
</h:head>
<h:body>
<h1>category</h1>
<h:form id="form">
<h:panelGrid columns="1">
<c:forEach items="#{categoryBean.parentCategoryList}" var="cat">
<h:panelGroup>
<h:outputText value="#{cat.name}"/>
<h:commandButton value="+" type="button" onclick="expand('#{cat.name}');"/>
</h:panelGroup>
<h:panelGroup>
<h:selectManyCheckbox id="#{cat.name}" style="display: none" value="#{categoryBean.selectedCategoryList}">
<f:selectItems value="#{categoryBean.getSubCategoryList(cat.id)}" var="sub" itemLabel="#{sub.name}" itemValue="#{sub.name}"/>
</h:selectManyCheckbox>
</h:panelGroup>
</c:forEach>
</h:panelGrid>
<h:commandButton value="Submit" action="result" />
<h:commandButton value="Reset" type="reset" />
</h:form>
<script type="text/javascript">
function expand(cat) {
var name = "form:" + cat;
alert(name);
var element = document.getElementById(name);
if(element.style.display == 'block') {
element.value = "-";
element.style.display = 'none';
} else {
element.value = "+";
element.style.display = 'block'
}
}
</script>
</h:body>
</html>
내 관리 빈
package com.gtp.iqp.presentation.managedBeans;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.gtp.iqp.business.bo.Category;
import com.gtp.iqp.business.delegate.CategoryDelegate;
@SuppressWarnings("serial")
@Component
public class CategoryBean extends BaseManagedBean {
@Autowired
private CategoryDelegate categoryDelegate;
private List<Category> parentCategoryList;
private List<String> selectedCategoryList;
public CategoryDelegate getCategoryDelegate() {
return categoryDelegate;
}
public void setCategoryDelegate(CategoryDelegate categoryDelegate) {
this.categoryDelegate = categoryDelegate;
}
public List<Category> getParentCategoryList() {
parentCategoryList = categoryDelegate.getParentCategories();
return parentCategoryList;
}
public void setParentCategoryList(List<Category> parentCategoryList) {
this.parentCategoryList = parentCategoryList;
}
public List<String> getSelectedCategoryList() {
return selectedCategoryList;
}
public void setSelectedCategoryList(List<String> selectedCategoryList) {
this.selectedCategoryList = selectedCategoryList;
}
public List<Category> getSubCategoryList(long parent) {
return categoryDelegate.getSubCategories(parent);
}
}
내 문제
<f:selectItems value="#{categoryBean.getSubCategoryList(cat.id)}"/>
위의 selectItems 문은 데이터베이스에서 목록을 가져올 수 있습니다. 관리 빈에 목록이 포함되어 있음을 알 수 있습니다. 그러나 컨트롤이 xhtml 페이지로 전송되면 표시되지 않습니다. 다음 예외가 표시됩니다.
Hibernate: select this_.id as id1_1_0_, this_.name as name2_1_0_, this_.parent as parent3_1_0_ from category this_ where this_.parent=?
Hibernate: select this_.id as id1_1_0_, this_.name as name2_1_0_, this_.parent as parent3_1_0_ from category this_ where this_.parent=?
Hibernate: select this_.id as id1_1_0_, this_.name as name2_1_0_, this_.parent as parent3_1_0_ from category this_ where this_.parent=?
Dec 13, 2013 2:56:06 PM com.sun.faces.context.ExceptionHandlerImpl log
FATAL: JSF1073: java.lang.IllegalArgumentException caught during processing of RENDER_RESPONSE 6 : UIComponent-ClientId=, Message=Release Management
Dec 13, 2013 2:56:06 PM com.sun.faces.context.ExceptionHandlerImpl log
FATAL: Release Management
java.lang.IllegalArgumentException: Release Management
at javax.faces.component.UIComponentBase.validateId(UIComponentBase.java:592)
at javax.faces.component.UIComponentBase.setId(UIComponentBase.java:412)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.assignUniqueId(ComponentTagHandlerDelegateImpl.java:373)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:176)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
at com.sun.faces.facelets.tag.jstl.core.ForEachHandler.apply(ForEachHandler.java:230)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87)
at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:161)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:980)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:99)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
누군가 내가 뭘 잘못하고 있으며 어떻게 고칠 수 있는지 말해 줄 수 있습니까?
스택 추적의 맨 윗줄에있는 클래스 / 메소드 이름을 자세히 살펴보면 좋은 라이브러리에는 자체 설명 클래스 / 메소드 이름이 있습니다.
java.lang.IllegalArgumentException: Release Management
at javax.faces.component.UIComponentBase.validateId(UIComponentBase.java:592)
at javax.faces.component.UIComponentBase.setId(UIComponentBase.java:412)
따라서 id
UI 구성 요소를 설정하는 동안 발생했습니다 . ID가 확인 중이며 유효하지 않은 것으로 간주됩니다. 실제로 javadoc에Release Management
따라 유효하지 않은 내부 공간이 있습니다 .
이 UIComponent의 컴포넌트 식별자 (있는 경우)를 설정합니다. 구성 요소 식별자는 다음 구문 제한을 따라야합니다.
- 길이가 0 인 문자열이 아니어야합니다.
- 첫 번째 문자는 문자 또는 밑줄 ( '_')이어야합니다.
- 후속 문자는 문자, 숫자, 밑줄 ( '_') 또는 대시 ( '-') 여야합니다.
HTML 요소 ID의 공백도 HTML 사양 에 따라 유효하지 않습니다 (알다시피 JSF는 기본적으로 HTML 코드 생성기이며 물론 HTML 사양을 준수해야합니다).
ID 및 NAME 토큰은 문자 ([A-Za-z])로 시작해야하며 그 뒤에 문자, 숫자 ([0-9]), 하이픈 ( "-"), 밑줄 ( "_")이 올 수 있습니다. , 콜론 ( ":") 및 마침표 ( ".").
범인은 다음과 같습니다.
<h:selectManyCheckbox id="#{cat.name}" ...>
이 특별한 경우에는 기본적으로 두 가지 옵션이 있습니다.
용도 <h:dataTable>
대신을 <h:panelGrid><c:forEach>
, 그것은 행 인덱스로 시작 자동 생성 된 ID를받을 수 있습니다 :
<h:dataTable value="#{categoryBean.parentCategoryList}" var="cat">
<h:column>
<h:outputText value="#{cat.name}"/>
<h:commandButton value="+" type="button" onclick="expand('#{cat.name}');"/>
<br/>
<h:selectManyCheckbox id="name" style="display: none" value="#{categoryBean.selectedCategoryList}">
<f:selectItems value="#{categoryBean.getSubCategoryList(cat.id)}" var="sub" itemLabel="#{sub.name}" itemValue="#{sub.name}"/>
</h:selectManyCheckbox>
</h:column>
</h:dataTable>
에서 증분 숫자 접미사가있는 고정 접두사를 사용합니다 <c:forEach varStatus>
.
<h:panelGrid columns="1">
<c:forEach items="#{categoryBean.parentCategoryList}" var="cat" varStatus="loop">
<h:panelGroup>
<h:outputText value="#{cat.name}"/>
<h:commandButton value="+" type="button" onclick="expand('#{cat.name}');"/>
</h:panelGroup>
<h:panelGroup>
<h:selectManyCheckbox id="name_#{loop.index}" style="display: none" value="#{categoryBean.selectedCategoryList}">
<f:selectItems value="#{categoryBean.getSubCategoryList(cat.id)}" var="sub" itemLabel="#{sub.name}" itemValue="#{sub.name}"/>
</h:selectManyCheckbox>
</h:panelGroup>
</c:forEach>
</h:panelGrid>
expand()
필요한 경우 그에 따라 JS 함수 의 인수를 변경하는 것을 잊지 마십시오 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다