jsf 2 - h:commandLink 操作不会在使用 JSF 2 的每次单击中触发



我有一个masterLasyout.xhtml:

<h:form id="abc">
  <h1>
    <ui:insert id="abc1" name="title"></ui:insert>
  </h1>
  <p>
    <ui:insert id="abc2" name="body"></ui:insert>
  </p>
</h:form>

我有两个片段文件(它们在ui:composition中(:

<p:inputText id="it1" value="#{exampleBean.name}" immediate="true" ></p:inputText>
<h:commandLink id="cl1" immediate="true"  value="Text1" action="#{exampleBean.ModifyLink2}" actionListener="exampleBean.Modify">
    <p:ajax update=":abc:main"></p:ajax>
</h:commandLink>

第二个文件:

<p:inputText id="it2" value="#{exampleBean.name}" immediate="true"></p:inputText>
<h:commandLink id="cl2" immediate="true" value="Text2" action="#{exampleBean.ModifyLink}" actionListener="exampleBean.Modify"  >
    <f:param value="/snippets/snippet1.xhtml" id="link"></f:param>
    <p:ajax update=":abc:main"></p:ajax>
</h:commandLink>

我有托管bean:

现在,我希望在片段之间切换,并在以下托管bean中激发操作之间切换:

@ManagedBean (name="exampleBean")
@RequestScoped
public class ExampleBean {
    /** Creates a new instance of ExampleBean */
    public ExampleBean() {
        m_User = new User();
        SnippetFileName = "/snippets/snippet2.xhtml";
    }
    public void Modify(ActionEvent a){
        System.out.println("Modify");
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        String t = externalContext.getRequestParameterMap().get("link");        
        System.out.println("SnippetFileName in ModifyLink is " + t);
    }
    public String ModifyLink()
    {        
        System.out.println("ModifyLink");
        SnippetFileName = "/snippets/snippet1.xhtml";
        return "page";
    }
    public String ModifyLink2()
    {
        System.out.println("ModifyLink2");
        SnippetFileName = "/snippets/snippet2.xhtml";
        return "page";
    }
    private String SnippetFileName;
    public String getSnippetFileName()
    {
        return SnippetFileName;
    }
    public void setSnippetFileName(String i_filename)
    {
        SnippetFileName = i_filename;
    }
    private User m_User;
    public String getName(){
        System.out.println("getName");
        if (m_User==null)
        {
            return null;
        }
        return m_User.getName();
    }
    public void setName(String i_Name){
        System.out.println("setName");
        String name = i_Name.trim();
        if (m_User!=null)
        {
            m_User.setName(name);
        }
    }
}

发生的情况是,在点击次数为1,3,5,7的情况下…ModifyLink方法会触发,而在点击次数2,4,6,8的情况下,"ModifyLink2"不会。我似乎不明白为什么会发生这种行为。我读了几篇文章,包括commandButton/commandLink/ajax-action/listaner方法未调用或输入值未更新,其中指出了7个问题,这些问题都不适合口语案例http://vierwaende.org/articles/posts/jsf-2-evaluation-test.html这带来了关于JSF 2生命周期的一个非常好的概述。我也尝试过删除Ajax,但它仍然这样做。

提前谢谢。

问题已解决。在web.xml中,我定义了:

 <context-param>
     <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
     <param-value>false</param-value>
 </context-param>

我想知道是否有可能在JSF 2中动态添加(通过程序或使用xml文件(必须动态添加的工作流页面控件。在上述问题的情况下,在页面的第一次请求期间创建的控件树中没有定义其中一个控件。那么,在另一个注意事项中:是否有一个选项可以在不修改web.xml的情况下将控件动态添加到控件树中进行优化?

相关内容

  • 没有找到相关文章

最新更新