0

我有以下简单的 selectOneMenu

<h:selectOneMenu id="shop" styleClass="tcell"
                 value="#{shoppingcenterControler.shoppingCenterScreenBean.shoppingcenterName}"
                 onchange="submit()"
                 valueChangeListener="#{shoppingcenterControler.shopChooseAction}">
  <f:selectItem itemValue="#{option.defaultShoppingcenter}" itemLabel="#{option.defaultShoppingcenter}"></f:selectItem>
  <f:selectItems value="#{shoppingCenterScreenBean.shoppingcenternames}"></f:selectItems>
</h:selectOneMenu>

当我在上使用@Named注释时,shoppingcenterControler我收到一条javax.el.PropertyNotFoundException警告我Target Unreachable, identifier 'shoppingcenterControler' resolved to null

当我使用@ManagedBean注释时,我收到警告:Property 'shopChooseAction' not found on type com.manageMyShopping.presentation.controler.ShoppingcenterControlershopChooseAction虽然不是属性,但它是:

public void shopChooseAction(ValueChangeEvent event){
    String shopName = getShoppingCenterScreenBean().getShoppingcenterName();
    if (!shopName.equals(defaultShopp)) {
        for (ShoppingCenterScreenBean thisShop : Shoppinglistcontroler.getShoppinglistScreenBean().getShoppingCentersScreenBean()) {
            if (!thisShop.getShoppingcenterName().equals(shopName)) {

                ShoppingCenterScreenBean newShoppingcenter = new ShoppingCenterScreenBean();
                newShoppingcenter.setShoppingcenterName(shopName);
                ShoppinglistScreenBean shoppinglist = Shoppinglistcontroler.getShoppinglistScreenBean();
                shoppinglist.getShoppingCentersScreenBean().add(newShoppingcenter); 
            }
        }
    }
}

我查看了不同的链接,包括以下内容: 一个类似的问题

但是,它既不适合我,也不喜欢伪造的解决方案。我正在寻找一个真正的解决方案,我想了解

  1. 为什么@Named注释没有按预期运行?我已将相应的依赖项添加到pom.xml我的项目文件中。
  2. 为什么valueChnageListener要提高PropertyNotFoundException方法的名称?

非常感谢任何帮助。

我的环境:Fedora 24、Java 1.8、apache-tomcat 8.0.33,我使用的是 Eclipse Mars。

4

1 回答 1

0

我终于解决了我的问题。我没有使用标签 作为valueChangeListener标签的属性,而是使用了如下标签:<h:selectOneMenu><f:valueChangeListener>

<h:selectOneMenu id="shop" styleClass="tcell"
                                value="#{shoppingcenterControler.shoppingCenterScreenBean.shoppingcenterName}"
                                onchange="submit()">
                                <f:selectItem itemValue="#{option.defaultShoppingcenter}" itemLabel="#{option.defaultShoppingcenter}"></f:selectItem>
                                <f:selectItems
                                    value="#{shoppingCenterScreenBean.shoppingcenternames}"></f:selectItems>
                                <f:valueChangeListener type="com.manageMyShopping.presentation.controler.ShoppingcenterListener"></f:valueChangeListener>
</h:selectOneMenu>

我已将ShoppingcenterListener类添加为:

public class ShoppingcenterListener implements ValueChangeListener {

FacesContext context = FacesContext.getCurrentInstance();
String bundleName = "com.manageMyShopping.presentation.elementaryBeans.itemOptions";
Locale local = context.getViewRoot().getLocale();
ResourceBundle bundle = ResourceBundle.getBundle(bundleName, local);
String defaultShop = bundle.getString("defaultShoppingcenter");

@Override
public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {

    String shopName = event.getNewValue().toString();
    System.out.printf("ShoppingcenterNqme is: %s\n", shopName);
    if (!shopName.equals(defaultShop)) {
        for (ShoppingCenterScreenBean thisShop : Shoppinglistcontroler.getShoppinglistScreenBean().getShoppingCentersScreenBean()) {
            if (!thisShop.getShoppingcenterName().equals(shopName)) {

                ShoppingCenterScreenBean newShoppingcenter = new ShoppingCenterScreenBean();
                newShoppingcenter.setShoppingcenterName(shopName);
                ShoppinglistScreenBean shoppinglist = Shoppinglistcontroler.getShoppinglistScreenBean();
                shoppinglist.getShoppingCentersScreenBean().add(newShoppingcenter); 
            }
        }
    }
}

}

这解决了我的问题。我仍然不明白为什么@Named注释没有按预期运行。

于 2016-07-19T22:10:52.650 回答