배열의 문자열을 기반으로 메소드에 액세스하려면 어떻게해야합니까?
-
20-08-2019 - |
문제
안녕하세요!
이것이 가능한지조차 확신하지 못하지만 바라건대 Java에 있습니다. 변수 변수를 사용하고 변수에 동적으로 액세스하여 PHP에서 수행 한 것을 알고 있지만 다른 질문에서 Java에서는 이것이 불가능하다는 것을 읽었습니다.
JSF GUI에 체크 박스 상태가 포함 된 문자열 배열이 있습니다. 모든 확인란이 설정되면 배열은 다른 확인란의 값을 포함하는 문자열로 채워집니다.
확인란의 레이블과 값은 다음과 같은 모습을 통해 반복하여 구축됩니다.
private static final String[][] OVERVIEW_FIELDS = {{"ID", "requestid"},
{"Date added", "dob"}, {"Title", "requestTitle"}, {"Process", "processId"},
..., ..., ...};
그런 다음 배열을 반복하고 JSF SelectItems를 만들어냅니다.
for (int i = 0; i < OVERVIEW_FIELDS.length; i++) {
SelectItem item = new SelectItem(OVERVIEW_FIELDS[i][0], OVERVIEW_FIELDS[i][1]);
getFields().add(item);
}
문제와 현재 솔루션 (누군가가 더 나은 것으로 리팩터링하는 데 도움이되기를 바랍니다.
for (String item : getVisibleFields()) {
if (item.equals("dob")) {
setDob(true);
}
if (item.equals("requestTitle")) {
setRequestTitle(true);
}
if (item.equals("processId")) {
setProcessId(true);
}
if (...) {
}
}
그래서 11 부 화병제를 위해 계속됩니다. 이 솔루션이 마음에 들지 않으며 시스템의 다른 콩에서 비슷한 패턴이 보입니다.
이것에 대한 더 나은 해결책이 있는지 아는 사람이 있습니까? 체크 박스 어레이에 포함 된 내용에 따라 렌더링 된 필드를 true/false로 설정하는 부울 제어 열.
JSF EL에서 visiblefields 변수와 포함 메소드에 액세스 할 수 있기를 바랐으므로 객체가 배열에 존재하는 경우 true 또는 false를 반환합니다. 이것은 작동하지 않는 것 같습니다. EL은 내용 방법에 액세스하지 못합니다.
나는 현재 사용하고있다 :
rendered="#{overviewFilterBean.dob}"
그리고 나는이 코드를 시도했다 :
rendered="#{overviewFilterBean.visibleFields.contains['dob']}">
이제 이로 인해 최종 배열을 사용하고 부울을 설정했습니다. getFields().contains(OVERVIEW_FIELDS[i][1])
,하지만 어떻게 이것을 가능하게 할 수 있습니까?
Part Real 및 Part Pseudo 코드는 다음과 같습니다 (현재 목표로하고있는 솔루션) :
for (int i = 0; i < OVERVIEW_FIELDS.length; i++) {
if (item.equals(OVERVIEW_FIELDS[i][1])) {
setOVERVIEW_FIELDS[i][1](true);
}
}
큰 질문 :
값을 사용할 수있는 방법이 있습니까? OVERVIEW_FIELDS[i][1]
올바른 부울 변수를 설정하거나이를 맵으로 바꾸고 JSF EL을 사용하여 맵에 키가 있는지 확인할 수 있습니까?
시간 내 주셔서 감사합니다. 작은 지점에 도달하기 위해 긴 질문을 써서 죄송합니다 :/
편집하다:
반사 방법으로 5 개의 예외가 발생했으며, 큰 코드 블록을 처리하고 사람들은 또한 비싼 방법이라고 말했습니다. 이것은 나의 오래된 솔루션이나지도를 사용함으로써 그것을 수행하는 가장 좋은 방법이라고 믿게한다. 나는지도 솔루션을 시도 할거야 =)
해결책
항상 값을지도에 저장할 수 있습니다. 그러나 메소드 이름을 문자열로 기준으로 메소드를 호출하려면 반사를 사용하십시오. 보다http://java.sun.com/developer/technicalarticles/alt/reflection/