我无法理解这个特殊情况的JSF生命周期。
我正在尝试使用Primefaces 6.0开发一个简单的模态CRUD,并且我遇到了添加/编辑模式的beheaviour问题。
我想要完成的是:
添加
修改
为此,我将“field1”禁用属性链接到我的bean上的 editMode 变量。
当我点击Add Button时,链接的动作initAddRubro被触发并设置editMode = false(假设默认情况下为true)。
当我点击没有立即数=真的添加按钮时,会在添加/编辑模式窗口中触发验证( Field1 is required = true )。
如果我在添加按钮上使用immediate = true,则不会刷新已禁用的属性。
@Component
@Scope("session")
public class RubrosFacesBean implements Serializable{
private boolean editMode = true;
public String initAddRubro(){
editMode = false;
return null;
}
}
<p:commandButton value="Add" icon="ui-icon-plusthick"
oncomplete="PF('addPanelDialog').show();" style="float: right"
immediate="true" ajax="true" action="#{rubrosFacesBean.initAddRubro}"/>
<p:dialog header="Rubro" widgetVar="addPanelDialog" height="200" style="margin-left: auto;" modal="true" id="addPanelDialog" >
<p:messages autoUpdate="true" />
<p:panelGrid columns="2" id="addPanel">
<h:outputLabel for="field1" value="Field 1: " />
<p:inputText id="field1" value="#{rubrosFacesBean.field1}" label="Field1" required="true" disabled="#{rubrosFacesBean.editMode}"/>
</p:panelGrid>
</p:dialog>
感谢任何帮助。 提前谢谢。
涓.-
答案 0 :(得分:0)
您可以在添加按钮上保留immediate="true"
,只需将以下属性添加到其中
update="addPanel"
或
您可以设置immediate="false"
并添加以下属性
process="@this" update="addPanel"
无论您选择哪个选项,在您按下添加按钮后,将跳过验证,将执行Ajax,最后p:panelGrid
将更新disable
p:inputText
vector<string> split_alpha(string to_split) {
vector<string> results;
string::iterator start = to_split.begin();
string::iterator it = start;
++it;
//get rid of any non-alphaneumeric chars at the front of the string
while (!isalnum(*start)) {
++start;
++it;
}
while (it != to_split.end()) {
if (!isalnum(*it)) {
string to_add = string(start, it);
lower_alpha(to_add);
results.push_back(to_add);
++it;
if (it == to_split.end()) { break; }
while (!isalnum(*it)) {
++it;
if (it == to_split.end()) { break; }
}
start = it;
++it;
}
else {
++it;
if (it == to_split.end()) { break; }
}
}
//adds the last word
string to_add = string(start, it);
lower_alpha(to_add);
results.push_back(to_add);
return results;
}
属性。
不要忘记使用“编辑”按钮执行相同操作。