我有一个 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>
我有2个片段文件(它们在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'nonen'吨。我似乎无法理解为什么会发生这种行为。
我阅读了一些文章,包括commandButton/commandLink/ajax action/listener method not invoked or input value not updated,其中列出了7个问题,这些问题都不适用于口头案例,而http://vierwaende.org/articles/posts/jsf-2-evaluation-test.html则对JSF 2生命周期进行了非常好的概述。
我也试图删除Ajax,它仍然会这样做。
提前致谢。
答案 0 :(得分:0)
问题得到解决。在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,以进行优化?