我是JSF和堆栈溢出的新手,我想根据单击按钮来隐藏和显示组件。如果按钮被点击,那么组件应该是可见的,下一次它应该是不可见的,依此类推。我试过下面的程序
我的jsg页面
<p:commandButton value="submit" action="#{exampleBean.hideOrShow}"
update=":test" />
<h:inputText value="#{exampleBean.hidden}"/>
<h:inputText value="#{exampleBean.i}"/>
<h:panelGroup layout="block" rendered="#{exampleBean.hidden}">
<div>
Hello,<h:inputText value="hi"/>
testing,<h:inputText />
addr:<h:inputText/>
</div>
</h:panelGroup>
</h:form>
和
我的豆
public void hideOrShow(){
if (!hidden)
{
i++;
hidden=true;
}
else
{
i++;
hidden=false;
}
}
/**
* @return the hidden
*/
public boolean isHidden() {
return hidden;
}
/**
* @param hidden the hidden to set
*/
public void setHidden(boolean hidden) {
this.hidden = hidden;
}
/**
* @return the i
*/
public int getI() {
return i;
}
/**
* @param i the i to set
*/
public void setI(int i) {
this.i = i;
}
}
注意:前两次点击它工作正常,然后它不工作。
Thanks in Advance
您可以尝试使用AJAX代替表单提交。您可以使用f:ajax
并更改toggle成员变量hidden
值,并使用render
属性来更新panelGroup
你可以试试
<p:commandButton value="submit">
<f:ajax listener="#{exampleBean.hideOrShow}" event="click" render="panel1"></f:ajax>
</p:commandButton>
并在panelGroup
中添加一个'id'属性<h:panelGroup layout="block" rendered="#{exampleBean.hidden}" id="panel1">
<div>
Hello,<h:inputText value="hi"/>
testing,<h:inputText />
addr:<h:inputText/>
</div>
</h:panelGroup>
希望有帮助!
注意:因为你的form
标签不可见的开始,只是要知道,如果你有id
为你的<h:form>
标签,那么你需要在render
属性
'update'属性引用页面上的id,因此必须声明它。记住,你不能更新具有'rendered'属性的元素。更多信息在这里
还可以考虑使用BooleanCheckBox