GWT 페이지 또는 패널에 포함 된 모든 위젯을 읽을 수있는 프로그래밍 방식이 있습니까?GWT에서 페이지/패널의 모든 위젯 나열
"ErrorLabel"이라는 접미어가 붙은 여러 가지 오류 레이블이 있는데 그 중 하나를 찾아서 지우고 싶습니다. 나는 그들 목록을 할 수 있지만, 내가 실제로 어떤 것을 가지고 있다면 그것을 자동화 할 수 있다고 생각했다 ...
나는 UiBinder를 사용하고있다.
GWT 페이지 또는 패널에 포함 된 모든 위젯을 읽을 수있는 프로그래밍 방식이 있습니까?GWT에서 페이지/패널의 모든 위젯 나열
"ErrorLabel"이라는 접미어가 붙은 여러 가지 오류 레이블이 있는데 그 중 하나를 찾아서 지우고 싶습니다. 나는 그들 목록을 할 수 있지만, 내가 실제로 어떤 것을 가지고 있다면 그것을 자동화 할 수 있다고 생각했다 ...
나는 UiBinder를 사용하고있다.
recursion
메서드를 사용하면 모든 구성 요소의 하위를 가져올 수 있습니다.
단계
는 다음과 같이하십시오 (?를UiField
이름을 읽는 방법)
을
당신이 gwt.xml에서 항목 아래에있는 추가
<inherits name="com.google.gwt.user.Debug"/>
ui:field
등과 함께
사용 debugId
아래에서 귀하의 ui.xml
이제 이드를 아래 그림과 같이 ID를 기본 접두사 gwt-debug-
생성되는 모든
myCheckBox.getElement().getId();
을 얻을 수 있습니다. 원하는 경우 제거 할 수 있습니다.
주 : 귀하의 요구 사항에 따라 더 많은 위젯과 구성 요소를 추가 여기
gwt-debug-myCheckBox
.hide .errorLabel {display: none}
다음 : "errorLabel"예를 들어, 당신의 CSS 파일에 다음 줄을 추가 -
import java.util.Iterator;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
public class WidgetValidator {
private static void validateFlexTable(final FlexTable flextable) {
for (int row = 0; row < flextable.getRowCount(); row++) {
for (int column = 0; column < flextable.getCellCount(row); column++) {
WidgetValidator.validateWidget(flextable.getWidget(row, column));
}
}
}
private static void validatePanel(final Panel panel) {
final Iterator<Widget> iterator = panel.iterator();
while (iterator.hasNext()) {
WidgetValidator.validateWidget(iterator.next());
}
}
public static void validateWidget(final Widget widget) {
if (widget != null) {
if (widget instanceof FlexTable) {
WidgetValidator.validateFlexTable((FlexTable) widget);
} else if (widget instanceof Panel) {
WidgetValidator.validatePanel((Panel) widget);
} else {
System.out.println(widget.getElement().getId().replace("gwt-debug-", ""));
}
}
}
}
가장 간단한 해결책은 모든 라벨에 클래스 이름을 추가하는 것입니다 이 레이블들을 숨기거나 표시하려면 다음 코드를 사용하십시오 :
parentPanel.addStyleName("hide");
parentPanel.removeStyleName("hide");
'getId()'는 나에게 빈 문자열을 반환합니다 :(... – jgp
) 질문에 오해가 있습니다 .Ui : 필드에 액세스 할 수 없습니다. 위젯, 그것을 선언하는 것 외 :'@UiField Label errorLabel'. –
업데이트 된 솔루션보기. –
어떤 종류의 '패널'을 사용하는지에 따라 다릅니다. 'ComplexPanel'과 하위 클래스에는 [getChildren()] (http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/ui/ComplexPanel.html#getChildren()) 메소드가 있습니다. 'Iterator'를 리턴합니다. 재귀 논리를 구현해야합니다. 모든 자식을 반환하는 내장 함수가 있다고 생각하지 마십시오 (아마도 '요소'수준에 있을까요?). – Baz
나는 DOM이나 HTML 레벨로가는 것을 피하고 싶다. 만약 내가 할 수 있다면 : – jgp
'Iterator' 때문에'VerticalPanel'에 확장 된'for' 루프를 간단하게 사용할 수있다. . 참조를 위해 [this] (http://stackoverflow.com/a/7456674/1740724)를보십시오. 이 재귀 = 승리 – Baz