【问题标题】:JSF 2: access selected value of selectOneMenu in a form BEFORE submitJSF 2:在提交之前访问表单中 selectOneMenu 的选定值
【发布时间】:2012-08-31 03:42:14
【问题描述】:

查看

<h:form id="main_form">
    <p:inputText id="title" required="true" label="Title" value="#{myBean.myLink.title}" immediate="true" />

    <p:selectOneMenu id="scope" required="true" label="Scope" value="#{myBean.myLink.scope}" immediate="true" >
        <f:selectItem itemLabel="Please choose" itemValue="" />
        <f:selectItems value="#{myBean.availableScopes}" id="selScope"/>
    </p:selectOneMenu>

    <p:inputText id="link" required="true" label="URL" value="#{myBean.myLink.link}" immediate="true">      
        <p:ajax event="blur" update="msgLink" listener="#{myBean.checkUrl}" />
    </p:inputText>

    ... msgLink and other (required) elements

    ... submit button
</h:form>

托管 Bean

@Component("myBean")
@Scope("session")
public class MyBean implements Serializable {

    private Link myLink;
    private Map<String, String> availableScopes;

    public MyBean() {
        this.availableScopes = new HashMap<String, String>();
        this.availableScopes.put("Intranet", "Intranet");
        this.availableScopes.put("Internet", "Internet");   
    }

    // setter/getters etc.

    public void checkUrl() {
        System.out.println(myLink.getTitle());  // works
        System.out.println(myLink.getScope());  // DOES NOT work
        System.out.println(myLink.getLink());   // works
    }

}
  • 我想根据所选范围提交表单之前检查 URL。但是被调用的方法可以访问对象的inputText 值。不是selectOneMenu 中选择的值。
  • 我已经用getExternalContext().getSessionMap().get("scope") 尝试过,但当时 SessionMap 为空。

是否有机会访问组合框的选定值?

谢谢 吉姆

【问题讨论】:

    标签: ajax jsf jsf-2 primefaces


    【解决方案1】:

    UIInput 组件内的&lt;p:ajax&gt;(和&lt;f:ajax&gt;)默认执行/处理当前 UIInput 组件(@this),而不是其他组件。

    如果要在调用侦听器方法时执行/处理所有UIInput 组件,则应在&lt;p:ajax process&gt;(或&lt;f:ajax execute&gt;)属性中指定:

    <p:inputText id="title" ... />
    
    <p:selectOneMenu id="scope" ... >
        ...
    </p:selectOneMenu>
    
    <p:inputText id="link" ...>      
        <p:ajax process="title scope link" ... />
    </p:inputText>
    

    与具体问题无关,我想知道所有这些 immediate="true" 属性在这种情况下如何有用。你确定你需要它们吗?

    【讨论】:

    • 感谢您的回答。现在将尝试它,尽管我非常确定它会起作用:-) 关于immediate="true":这些只是我尝试之一的剩余部分;-)
    • 只是另一个问题,所以我理解正确:在上面的示例中,不仅处理了当前的UIInput 组件,而且还处理了第一个inputText 组件(id=title)。该值在侦听器方法中可用。这是正常的行为吗? inputTextselectOneMenu 的进程行为有区别吗?
    • 不。显然您正在查看一些初始值,或者在您的实际代码中输入组件上有 &lt;p:ajax&gt;
    • 是的,输入组件中有&lt;p:ajax&gt;。抱歉,我忽略了这一点。
    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 2011-12-01
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多