복합 데이터 입력 양식에서 양식의 양식을 편집해야 할 수도 있습니다. JSF2에서는 이것이 가능하지 않기 때문에이 문제에 대해 더 나은 해결책이 무엇인지 궁금합니다. 다음은 내가 필요한 것의 예입니다.jsf2 form with ajax
- 두 콩 : OuterBean과 HobbyBean; HobbyBeans의 목록
- OuterBean이 (SessionScope 단위) ManagedBean은
- HobbyBean은 두 개의 필드 취미가 들어있다 OuterBean에 사용 같다 내가 OuterBean에 사용자의 이름을 추가하는 형태에 HobbyBeans을 추가 할
OuterBean을 제출하지 않고 새 값을 제출하여 목록을 채우지 않아도됩니다. 다음 코드 예제는 다음과 같습니다
<!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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html">
<h:head>
</h:head>
<h:body>
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Name" />
<h:inputText value="#{outerBean.name}" required="true" />
<h:outputText value="Hobbies" />
<h:dataTable id="ht" value="#{outerBean.hobbies}" var="h">
<h:column>
<h:outputText value="#{h.hobby}" />
<f:facet name="footer">
<h:inputText value="#{outerBean.hobby}" required="true" />
</f:facet>
</h:column>
<h:column>
<h:outputText value="#{h.like}" />
<f:facet name="footer">
<h:inputText value="#{outerBean.like}" required="true" />
<h:commandButton action="#{outerBean.addHobby}" value="+" immediate="true">
<f:ajax render="ht" />
</h:commandButton>
</f:facet>
</h:column>
</h:dataTable>
</h:panelGrid>
</h:form>
</h:body>
</html>
예, 외부 형태에 대한 명령 단추가없는,하지만 여기에 질문이 아니다. commandButton은 내부 양식을위한 것이므로 속성 immediate = true를 설정합니다. 이렇게하면 모든 필드가 비어 있지 않음이 검사됩니다 (필수 태그는 무시됩니다). 또한이 필드의 내용은 무시되고 ajax 요청으로 설정되지 않습니다. 어떻게 이것을 피하고 아우 쳐스 요청 내에서 h.hobby와 h.like의 필드 값을 OuterBean으로 보냅니 까? 여기
콩 :
@ManagedBean
@SessionScoped
public class OuterBean
{
private List<HobbyBean> hobbies;
private String name;
private String hobby;
private Integer like;
public OuterBean()
{
hobbies = new ArrayList<HobbyBean>();
}
public String addHobby()
{
hobbies.add(new HobbyBean(hobby, like));
System.out.println("hobbies: " + hobbies.toString());
return "";
}
public String submit()
{
System.out.println("name is " + name);
return "";
}
// + getter & setter
}
/* ------------------------------------------------------------------------ */
public class HobbyBean
{
private String hobby;
private Integer like;
public HobbyBean(String hobby, Integer like)
{
this.hobby = hobby;
this.like = like;
}
public String toString()
{
return hobby == null ? "" : hobby.concat(",").concat(like == null ? "" : like.toString());
}
// + getter & setter
}
나는 빈에 취미가 빈 취미 필드 있기 때문에 어떤 취미가 추가되지 있다는 것입니다 추가하면 이제 어떻게됩니까과 같은 설정되지 않은 (목록이 비어 로그 입니다 : "취미 : []"). 어떻게 작동시킬 수 있습니까?
중첩 양식이 유효한 HTML이 아니라는 사실을 알고 있습니까? 한 페이지에 두 개 이상의 양식을 넣을 수 있지만 중첩 할 수는 없습니다. – Tankhenk
예 이러한 제한 사항을 알고 있으므로 이러한 솔루션에 대한 해결 방법이 있다면 제 질문이 있습니다. 나는이 사건이 자주 일어날 수 있다고 생각하는 그러한 해결책이 없다고 생각하지 않을 것이다. –