문제

내 JSF 파일에서는 시작에 아래에 있습니다.

<h:form><h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/></h:form>.

이를 사용하여 Create New Staff Account에서 생성 할 때 새 계정을 만들기 위해 양식이있는 페이지로 다시 지시합니다.

그러나 no do 에서 no doung 내에서 동일하게 사용할 때 사용됩니다.나는 여전히 같은 페이지에있다 : (

<h:dataTable var="c" value="#{newStaffMemberServiceBean.newStaffMemberDataBeanList}"
  styleClass="order-table"
  headerClass="order-table-header"
  rowClasses="order-table-odd-row,order-table-even-row"
  border="1" id="staffListDataTable" width="100%">

  <h:column>
    <f:facet name="header">
       Staff Member Name
    </f:facet>
    <h:form><h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/></h:form>
  </h:column>
</h:dataTable>
.

실제로 내가 인쇄하고 싶은 것은 내가 dataTable를 사용하는 각 직원의 세부 사항입니다.그러나 위의 일과 같이 작동하지 않아도됩니다.

어디에서 yerch 를 제시하십시오.

업데이트 1

f:setPropertyActionListenernewStaffMemberServiceBean 에 있습니다.

@ManagedBean(name = "newStaffMemberServiceBean")
@RequestScoped
public class NewStaffMemberServiceBean {
    // some code
}
.

업데이트 2

html 생성 된

RequestScoped

<div align="right">
<form id="j_idt35" name="j_idt35" method="post" action="/adminManageStaffMember" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_idt35" value="j_idt35" />
<a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_idt35'),{'j_idt35:j_idt36':'j_idt35:j_idt36'},'');return false">Create New Staff Account</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="2664682277023387375:-3250423983171933030" autocomplete="off" />
</form>
.

내부

<form id="staffListDataTable:0:j_idt43" name="staffListDataTable:0:j_idt43" method="post" action="/adminManageStaffMember" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="staffListDataTable:0:j_idt43" value="staffListDataTable:0:j_idt43" />
<a href="#" onclick="mojarra.jsfcljs(document.getElementById('staffListDataTable:0:j_idt43'),{'staffListDataTable:0:j_idt43:j_idt45':'staffListDataTable:0:j_idt43:j_idt45'},'');return false">Create New Staff Account</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="2664682277023387375:-3250423983171933030" autocomplete="off" />
</form>
.

도움이 되었습니까?

해결책

원래 코드에 대한 몇 가지 수정 사항을 제안합니다.먼저 h:form 각각에 대해 commandLink를 사용하지 마십시오. 대신 dataTable에 대해 하나의 양식을 사용하십시오.둘째, Aciton을 트리거 한 구성 요소를 찾을 때만 action가 실행됩니다.datatable에 대한 요청 범위 목록을 사용하는 경우 뷰가 복원되거나보기를 만드는 데 사용 된 원본과 일치하지 않을 때 해당 목록이 거기에 없습니다.요청 범위에서 범위 이상을 보려면 관리되는 빈을 변경해야 할 수 있습니다.

셋째, 제안으로, commandLink 대신 h : oppectlink 또는 h : 링크를 사용할 수 있고 f : param을 제공하여이를 단순화하여 양식도 필요하지 않습니다.

다른 팁

테이블이 다른 형태로 감싸인가?

그렇다면 당신이 형태 안에 형식을 찍었습니다 ...

<h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/> 을 래핑하는 양식 태그를 제거합니다.

이와 같은 것

<h:column>
    <f:facet name="header">
       Staff Member Name
    </f:facet>
    <h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/>
</h:column>
.

commandLink 작업 메소드가 잘못된 것으로 추측합니다. 이 코드가 있습니다.

<h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/>
.

다음과 같은 것이 있어야합니다.

<h:commandLink value="Create New Staff Account"
    action="#{newStaffMemberServiceBean.adminCreateStaffMember"/>
.

@daniel이 게시됨에 따라 dataTable와 DataTable 내부의 commandLinks를 감쌀려면 1 개의 양식이 있어야합니다.

업데이트 :

당신이 알아야 할 중요한 사항은 다음과 같습니다.

관리되는 bean의 속성으로 목록이있는 경우이 목록은 정보를 표시하는 데 사용되며 데이터를 표시 할 수있는 버튼이나 링크를 포함하려는 경우 관리 빈에 대한 참조가 있어야합니다. 작성자의 목록. 이것은 최소한 2 가지 방법으로 수행 할 수 있습니다.

  • 세션에서 목록을 저장하고로드하십시오 (매우 나쁜 디자인, 코드를 유지하기가 꽤 어렵습니다).
  • viewScoped (JSF2.x 관점을 사용하고있는 경우, JSF 1.2를 사용하는 경우, MyFaces의 RichFaces 또는 a4j:keepAlive에서 t:saveState 태그를 시도 할 수 있습니다.

    JSF 2를 사용하고 있으므로 뷰닛에서 ViewScope를 사용할 수 있습니다. 이를 통해 동일한 뷰에서 요청을 수행 한 후에 bean은 다시 작성되지 않으므로 목록은 저장 자동으로 콩 내부에 자동으로 저장됩니다. 콩은 다음과 같이 보입니다 :

    @ManagedBean(name = "newStaffMemberServiceBean")
    @ViewScoped
    public class NewStaffMemberServiceBean implements Serializable {
        private List<StaffMember> lstStaffMember;
        //getters and setters...
        public NewStaffMemberServiceBean() {
            //populate the list...
            lstStaffMember = new ArrayList<StaffMember>();
        }
    
        //managing the navigation using the id as a parameter
        //additional, this can (and MUST BE) improved.
        public String viewStaffMemberDetails() {
            //get the id parameter from the link
            int id = Integer.valueOf(FacesContext.getCurrentInstance()
                .getExternalContext().getRequestParameterMap().get("id"));
            //searching that id in our staff member list
            for(StaffMember sm : lstStaffMember) {
                if (sm.getId() == id) {
                    //setting the staff member object in session
                    FacesContext.getCurrentInstance().getExternalContext()
                        .getSessionMap().put("staffMember", sm);
                    //returning the name of the page we want to navigate
                    return "adminCreateStaffMember";
                }
            }
            return "";
        }
    }
    
    .

    이제 XHTML을 확인해 봅시다. 그것은 꽤 간단합니다 :

    <h:form>
        Welcome
        <br />
        <h:dataTable
            value="#{newStaffMemberServiceBean.lstStaffMember}"
            var="staffMember">
            <h:column>
                <f:facet name="header">
                    Name
                </f:facet>
                <h:outputText value="#{staffMember.name}" />
            </h:column>
            <h:column>
                <f:facet name="header">
                    View Details
                </f:facet>
                <h:commandLink value="Show details"
                    action="#{newStaffMemberServiceBean.viewStaffMemberDetails}">
                    <f:param name="id" value="#{staffMember.id}" />
                </h:commandLink>
            </h:column>
        </h:dataTable>
    </h:form>
    
    .

    그리고 그게 다야! AdminCreateStaffMember.xhtml로 탐색 할 수 있으며 문제가없는 AdminCreateStaffMember Managed Bean의 StaffMember 객체를 사용하여 데이터 (자세히)를 표시 할 수 있습니다. 나는이 코드를 직접 시도했습니다 (나는 새로운 PC에 있으므로, 게시, 소프트웨어 등을 설치하기 전에 코드를 확인해야합니다 ...).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top