Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试嵌套JSF表达式字符串_Java_Jsf_Jsf 2_Primefaces_El - Fatal编程技术网

Java 尝试嵌套JSF表达式字符串

Java 尝试嵌套JSF表达式字符串,java,jsf,jsf-2,primefaces,el,Java,Jsf,Jsf 2,Primefaces,El,我想知道是否可以根据问题调整ExtendedBeanlResolver以处理此嵌套EL表达式: #{controllerBean.getBean('userProfileBean', component).street}* 其中controllerBean.getBean返回bean userProfileBean。我将使用扩展BeanelResolver获得以下异常: SCHWERWIEGEND: javax.el.PropertyNotFoundException: /WEB-INF/te

我想知道是否可以根据问题调整ExtendedBeanlResolver以处理此嵌套EL表达式:

#{controllerBean.getBean('userProfileBean', component).street}*
其中controllerBean.getBean返回bean userProfileBean。我将使用扩展BeanelResolver获得以下异常:

SCHWERWIEGEND: javax.el.PropertyNotFoundException: /WEB-INF/templates/modification/userProfile.xhtml @35,196 value="#{controllerBean.getBean('userProfileBean', component).street}": Property 'getBean' not found on type com.something.ControllerBean
如果我插入额外的括号,它可以工作,但看起来比现在更难看:

#{(controllerBean.getBean('userProfileBean', component)).street}*
是否可以不使用附加支架

在CycDemo回答后更新1:

奇怪的问题。 如果我把

<h:inputText value="#{beanOne.getBean('data').title}" />
如果我把它改成

<p:inputText value="#{beanOne.getBean('data').title}" />

页面甚至不会在开始时呈现。 我认为问题在于JSF试图在表单提交时调用setter,但无法正确计算它

有什么想法吗

更新2

显然,JSF试图调用getBean(),因为它正在寻找BeanOne上的属性(我在eclipse中有一个断点),这是错误的:

@ManagedBean
@ViewScoped
public class BeanOne {

  private Object bean = new String("something");

  public Object getBean(String name) {
    FacesContext context = FacesContext.getCurrentInstance();
    return context.getApplication().evaluateExpressionGet(context,
        "#{" + name + "}",
        Object.class);
  }

  public Object getGetBean() {
    return bean; // <-- will be called by JSF
  }

  public void setGetBean(Object bean) {
    this.bean = bean;
  }

}
@ManagedBean
@视域
公共类BeanOne{
私有对象bean=新字符串(“某物”);
公共对象getBean(字符串名称){
FacesContext context=FacesContext.getCurrentInstance();
返回context.getApplication().evaluateExpressionGet(上下文,
“#{”+name+“}”,
对象(类);
}
公共对象getBean(){
返回bean;//确保

    #{(controllerBean.getBean('userProfileBean', component)).street}
    change to
    #{controllerBean.getBean('userProfileBean', component).street}
当我进行测试时,它是在JSF2.0中工作的

使用jboss el
。下载jar文件

BeanOne.java 导入javax.faces.bean.ManagedBean; 导入javax.faces.bean.RequestScope

@ManagedBean(name="BeanOne")
@RequestScoped
public class BeanOne {
    private Data data;

    public Data getBean(String title) {
        data = new Data(title);
        return data;
    }
    public void show() {
        System.out.println("User Input ==>" + data.getInput());
    }
}
Date.java

public class Data {
    private String title;
    private String input;

    public Data(String title) {
        this.title = title;
    }

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        this.input = input;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
pageOne.xtml

<h:form>
    <h:inputText value="#{BeanOne.getBean('Test').input}"/><br/>
    <h:commandButton value="Show" action="#{BeanOne.show}"/>
</h:form>


在web.xml中添加以下配置

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

com.sun.faces.expressionFactory
org.jboss.el.ExpressionFactoryImpl
确保

    #{(controllerBean.getBean('userProfileBean', component)).street}
    change to
    #{controllerBean.getBean('userProfileBean', component).street}
当我进行测试时,它是在JSF2.0中工作的

使用jboss el。下载jar文件

BeanOne.java 导入javax.faces.bean.ManagedBean; 导入javax.faces.bean.RequestScope

@ManagedBean(name="BeanOne")
@RequestScoped
public class BeanOne {
    private Data data;

    public Data getBean(String title) {
        data = new Data(title);
        return data;
    }
    public void show() {
        System.out.println("User Input ==>" + data.getInput());
    }
}
Date.java

public class Data {
    private String title;
    private String input;

    public Data(String title) {
        this.title = title;
    }

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        this.input = input;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
pageOne.xtml

<h:form>
    <h:inputText value="#{BeanOne.getBean('Test').input}"/><br/>
    <h:commandButton value="Show" action="#{BeanOne.show}"/>
</h:form>


在web.xml中添加以下配置

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

com.sun.faces.expressionFactory
org.jboss.el.ExpressionFactoryImpl

你又遇到了哪个错误?提交原因;你又遇到了哪个错误?提交原因;@Manuel,请再次检查我为你的新问题更新的答案。尝试将你的数据类设置为托管bean,并像我处理你的BeanOne一样获取它。你应该得到与我相同的错误。我认为有一个“返回数据”您的BeanOne方法getBean(字符串标题)中缺少此项功能。@Manuel,请再次检查我为您的新问题更新的答案。尝试将您的数据类设置为托管bean,并像使用BeanOne一样获取它。您应该会收到与我相同的错误。我认为您的BeanOne方法getBean(字符串标题)中缺少“返回数据”。