我有一个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的情况下将控件动态添加到控件树中进行优化?