Oracle ADF의 SelectOnechoice의 탭 색인을 추가하는 방법은 무엇입니까?
-
21-09-2019 - |
문제
Oracle ADF의 SelectOnechoice의 탭 색인을 추가하는 방법은 무엇입니까?
해결책
불행히도 표준 JSF 수준에서 제어 할 수 없습니다. 적어도 표준 구성 요소와 렌더러가 아닙니다. 지정된 tabindex
적용됩니다 모두 생성 된 요소 (ADF는 아니지만 라디오 버튼이라고 생각합니다).
당신은 af:selectOneChoice
중독성 속성이 필요합니다 tabindexes
또는 따라서 쉼표로 된 인덱스 문자열을 받아들이고 이후에 생성 된 radiobuttons에 적용합니다.
해당 구성 요소의 ADF 문서를 참조하여 어떤 구성 요소 제품군이 속한 지, 어떤 렌더러가 사용중인 렌더러를 찾아야합니다. 한 번 알게되면 기본적으로 클래스를 만들어야합니다. extends
그것은 그것을 무시합니다 renderOption()
방법 (적어도 JSF 표준에서 정확히 해당 이름으로 호출됩니다. com.sun.faces.renderkit.html_basic.RadioRenderer
수업). 기본적으로 메소드 로직을 복사해야합니다 (ADF에 대해서는 확실하지 않지만 기본 JSF 구현은 오픈 소스입니다).
String tabindexes = (String) component.getAttributes().get("tabindexes");
if (tabindexes != null) {
String[] tabindexItems = tabindexes.split("\\s*,\\s*");
String indexKey = component.getClientId(context) + "_currentTabIndex";
Integer index = (Integer) component.getAttributes().get(indexKey);
if (index == null || index == tabindexItems.length) {
index = 0; // Note this thus restarts at 0 if there are more selectitems than tabindexes. Just to be on the safe side.
}
String tabindex = tabindexItems[index];
component.getAttributes().put(indexKey, ++index); // We need to save it for the next generated input element.
writer.writeAttribute("tabindex", tabindex, "tabindex");
}
사용자 정의 렌더러를 선언하는 경우 faces-config.xml
다음과 같이
<render-kit>
<renderer>
<component-family>put here the component family of af:selectOneChoice</component-family>
<renderer-type>put here the renderer type of af:selectOneChoice</renderer-type>
<renderer-class>com.example.YourCustomRadioRenderer</renderer-class>
</renderer>
</render-kit>
그런 다음 추가를 사용할 수 있습니다 tabindexes
다음과 같이 속성 :
<af:selectOneChoice .... >
<f:attribute name="tabindexes" value="1,3,5,7,2,4,6,8" />
Bean 속성에서 (생성 된) 문자열로 얻을 수 있도록 EL을 넣을 수도 있습니다.
<af:selectOneChoice .... >
<f:attribute name="tabindexes" value="#{bean.tabindexes}" />
이것이 새로운 통찰력을주기를 바랍니다.
제휴하지 않습니다 StackOverflow