-2

このボタンを押すと、test()メソッドは値を出力できません。そして、System.out.println(person);常にnullを出力しhandleCityChange()、フレームは赤で表示され、値をジャンプアウトするための右上隅は無効なメッセージです。どうすれば解決できますか?皆さんありがとう。

index.xhtml

<h:body>
  <h:form>
    <p:fieldset legend="Modify" toggleable="true" toggleSpeed="200" collapsed="true">
       <h:panelGrid columns="2" cellpadding="10" id="modify_change">
          <h:outputLabel value="Department :"/> 
          <p:selectOneMenu id="modify" value="#{modify.department}" style="width: 150px">
             <f:selectItem itemLabel="Choose Department" itemValue=""/>
             <f:selectItems value="#{modify.departments}" />
             <p:ajax update="modify_delete" listener="#{modify.handleCityChange()}" />
          </p:selectOneMenu>
       <h:outputLabel value="Choose Employee" />
          <p:selectOneMenu id="modify_delete" value="#{modify.person}" style="width: 150px">
             <f:selectItem itemLabel="Choose Employee" itemValue=""/>
             <f:selectItems value="#{modify.persons}" />
          </p:selectOneMenu>
       </h:panelGrid>
       <h:commandButton value="Go to Modify !" actionListener="#{modify.test()}"/>
    </p:fieldset>
  </h:form>
</h:body>

Javaコード

@ManagedBean
@SessionScoped
public class modify {

  EntityManagerFactory emf = Persistence.createEntityManagerFactory("com.mycompany_SuneCoolingSystem_war_1.0-SNAPSHOTPU");
  EmployeeJpaController jpaController = new EmployeeJpaController(null, emf);
  EntityManager e = jpaController.getEntityManager();
  private Map<String, String> departments = new HashMap<String, String>();
  private Map<String, String> persons = new HashMap<String, String>();
  private Map<String, Map<String, String>> allocatoin = new HashMap<String, Map<String, String>>();
  private String department;
  private String person;

  public modify() {
    Query q = e.createNamedQuery("Employee.findAll");
    List resultList = q.getResultList();
    for (int i = 0; i < resultList.size(); i++) {
        Employee result = (Employee) resultList.get(i);
        departments.put(result.getDepartment(), result.getDepartment());
    }
    q = e.createNamedQuery("Employee.findByDepartment");
    q.setParameter("department", department);
    resultList = q.getResultList();
  }

  public void handleCityChange() {
    if (department != null && !department.equals("")) {
        Query q = e.createNamedQuery("Employee.findByDepartment");
        q.setParameter("department", department);
        List resultList = q.getResultList();
        persons.clear();
        for (int j = 0; j < resultList.size(); j++) {
            Employee result = (Employee) resultList.get(j);
            persons.put(result.getName(), result.getName());
        }
    } else {
        persons = new HashMap<String, String>();
    }
    System.out.println(departments);
    System.out.println(department);
    System.out.println(persons);
    System.out.println(person);
  }
  public void test() {
    System.out.println(departments);
    System.out.println(department);
    System.out.println(persons);
    System.out.println(person);
  }

         //getter() and setter()
}
4

2 に答える 2

0

あなたはいくつかの間違ったことをしています:

  1. person 設定されることはありません!。したがって、それは常にnullであり、getPerson()が呼び出されるとnullを返し、そのように単純です。
  2. SessionScopedBeanを使用する必要があると思われる場所でBeanを使用していますViewScoped。詳細については、この質問を参照してください。
  3. または他のMap<String, String>を使用する必要がある場所を使用しています。sはキーと値のペア用です。List<String>CollectionMap
  4. なぜ一連のEmployeesを照会し、それをループしてそれらを取得するのDepartmentですか?のリストを検索してみませんDepartmentか?のようなものselect e.department from Employee e
  5. コンストラクターの最後の部分は効果がありません。とプロパティがnullであるため、Query qは二度と使用されません。resultlistdepartment

    q = e.createNamedQuery("Employee.findByDepartment");
    q.setParameter("department", department);
    resultList = q.getResultList();
    
  6. バッキングBeanで永続性/データベースのものを使用しています。これは一般的に非常に悪い習慣です。

于 2012-09-11T14:34:04.597 に答える
0

変更(actionListener> action):

<h:commandButton value="Go to Modify !" actionListener="#{modify.test()}"/>

に:

<h:commandButton value="Go to Modify !" action="#{modify.test()}"/>

そして、すべてを入れます<h:form></h:form>

よろしく、

于 2012-09-10T15:54:37.683 に答える