1

Primefaces を使用して JSF でエンティティの変更を実装しようとしています。

ユーザーをリストする私の主なビューは次のとおりです。

<p:growl id="growlEditUnit" showDetail="true" life="12000" />
    <p:dialog id="dialogEditUnit" header="Edit Unit" widgetVar="editUnitDialog" showEffect="fade" hideEffect="fade" resizable="false" >
        <ui:include src="editUnit.xhtml" />
    </p:dialog>

<h:form id="form2">  

        <p:dataTable id="units" var="unit" value="#{unitController.unitsOfLoggedInUser}" >  

            <f:facet name="header">  
                Click Edit or Delete after selecting a unit to modify or remove it  
            </f:facet>  

            <p:column headerText="Code">  
                #{unit.unitCode}  
            </p:column>  

            <p:column headerText="Name">  
                #{unit.unitName}  
            </p:column>  

            <p:column headerText="Semester" >  
                #{unit.semester}  
            </p:column>  

            <p:column headerText="Academic Year">  
                #{unit.academicYear}  
            </p:column>

            <p:column headerText="Twitter Username">  
                #{unit.twitterUsername}  
            </p:column>

            <p:column headerText="Actions">  
                <p:commandButton id="editButton" value="Edit" action="#{unitController.setCurrent(unit)}" update=":dialogEditUnit" oncomplete"editUnitDialog.show()" />  
            </p:column>  

        </p:dataTable> 


    </h:form>

このビューでは、すべてのデータが正しく一覧表示されます。ただし、現在を押すと、クリックされたボタンに基づいて、管理対象 Bean の現在の属性 (以下にリストされているコード) を単位で設定することが目的です。この後、編集ダイアログを更新して、その単位の値を入力し、oncomplete 属性を使用して表示できるようにします。ただし、編集ボタンをクリックしたときに管理されているメソッド setCurrent(unit) が呼び出されることはないようです。その後、ダイアログは空で表示されます。誰かが私が間違っていることを手伝ってくれますか? マネージドBeanコードも投稿しています。

@ManagedBean(name = "unitController")
@ViewScoped
public class UnitController implements Serializable {

private Unit current;

private List<Unit> unitsOfLoggedInUser;

@ManagedProperty(value="#{loginController.checkedUser}")
private Lecturer lecturer;

@EJB
private web.effectinet.ejb.UnitFacade ejbFacade;
@EJB
private web.effectinet.ejb.LecturerFacade lecturerFacade;

public UnitController() {
}

@PostConstruct
public void init(){
    if (lecturer.getLecturerId() == null)
        unitsOfLoggedInUser = null;
    else
        unitsOfLoggedInUser = (List<Unit>) lecturer.getUnitCollection();
}

public List<Unit> getUnitsOfLoggedInUser() {

        return unitsOfLoggedInUser;

}

public void setCurrent(Unit current) {
    this.current = current;
}

public Lecturer getLecturer() {
    return lecturer;
}

public void setLecturer(Lecturer lecturer) {
    this.lecturer = lecturer;
}
4

1 に答える 1

0

commandButton の action 属性は、unit変数の値に関する情報なしでレンダリングされます。

unitマネージド Bean のアクション メソッドにユニットを渡すには、commandButtonの<f:param>子タグでID を渡す必要があります。

<p:commandButton action="#{managedBean.actionMethod}" ........>
   <f:param name="unitid" value="#{unit.id}" /> 
</p:commandButton>

アクション メソッドから、からの名前でリクエスト パラメータを取得できます。ExternalContextこれにより、dataTable で commandButton が押されたユニットの ID が得られます。

于 2012-06-26T14:16:47.803 に答える