1

У меня есть простая страница с полем firstName и поле lastName, оба из которых обязательны для заполнения. Когда я вхожу только в одно поле, я получаю правильное сообщение об ошибке, но я теряю введенное значение. У меня есть получатели и сеттеры для полей, и страница правильно использует значения, если я их ввожу. Кажется, все настроено так же, как и в моем предыдущем проекте, и я не потерял данные на этих страницах. Я знаю, что этот вопрос задан раньше, но я не могу найти что-то не так с моим кодом, основанным на этих ответах, поэтому я надеюсь, что кто-то сможет понять, что я делаю неправильно.Моя форма не заполняется при завершении валидации

Мой JSP код:

<s:form action = "sign" validate="true" method="post" id="sign" > 
<s:hidden name="dateSigned"></s:hidden>  
<div class="row"> 
    <div class = "col-md-7 col-xs-12"> 
     <div class="col-md-3 col-sm-3 col-xs-12"><label for="firstName" class="pull-right"><span class="required">*</span><s:text name="firstName"></s:text>:</label></div> 
     <div class="col-md-3 col-sm-3 col-xs-12"><s:textfield name = "firstName" id = "firstName" value="" maxlength="50" class="form-control" onchange="dirtyFlag();" tabindex="4"/></div> 
     <div class="col-md-3 col-sm-3 col-xs-12"><label for="lastName" class="pull-right"><span class="required">*</span><s:text name="lastName"></s:text>:</label></div> 
     <div class="col-md-3 col-sm-3 col-xs-12"><s:textfield name = "lastName" id = "lastName" value="" maxlength="50" class="form-control" onchange="dirtyFlag();" tabindex="5"/></div> 
    </div> 
</div> 
    <div class="row"> 
     <s:submit method="save" key="button.save" cssClass="submit" onclick="clearDirtyFlag();" tabindex="1"/> 
    </div> 

Мои распорки действие:

 <action name="sign" class="gov.mo.dnr.egims.controller.request.RequestorSignatureAction">   
     <result name="success" type="tiles">reqSign</result> 
     <result name="input" type="tiles">reqSign</result> 
     <result name="error" type="tiles">error</result> 
     <result name="ownerSignature" type="redirectAction"> 
      <param name="actionName">owner</param> 
      <param name="namespace">/req</param> 
      <param name="requestId">${requestId}</param> 
     </result>   
    </action> 

Мой плитки код:

<definition name="reqSign" extends="baseLayout"> 
    <put-attribute name="navbar" 
     value="/WEB-INF/pages/request/nav_secondary.jsp" /> 
    <put-attribute name="content" 
     value="/WEB-INF/pages/request/RequestorSignature.jsp" /> 
</definition> 

Мои struts2 результат-типы и код перехватчик:

 <result-types> 
     <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" /> 
    </result-types> 
    <interceptors> 
     <interceptor name="validUser" class="gov.mo.dnr.egims.controller.interceptors.ValidUser" /> 
     <interceptor-stack name="validUserStack"> 
      <interceptor-ref name="validUser" /> 
      <interceptor-ref name="defaultStack" /> 
     </interceptor-stack> 
     <interceptor name="userInRole" class="gov.mo.dnr.egims.controller.interceptors.UserInRole"> 
      <param name="rolesList">Administrator,Geologist,Requestor,Reviewer, User</param> 
     </interceptor> 
     <interceptor-stack name="userInRoleStack"> 
      <interceptor-ref name="userInRole" /> 
     </interceptor-stack> 
    </interceptors>  

Моя проверка XML является:

<validators> 

<field name="firstName"> 
    <field-validator type="requiredstring"> 
     <param name="trim">true</param> 
     <message key="errors.required" /> 
    </field-validator>  
    <field-validator type="regex"> 
     <param name="regex">^[ a-zA-Z0-9'\-,.!:#@/]*$</param> 
     <message key="errors.invalidCharacter"/> 
    </field-validator> 
    <field-validator type="stringlength"> 
     <param name="maxLength">50</param> 
     <message key="errors.maxlength"></message> 
    </field-validator> 
</field> 


<field name="lastName"> 
     <field-validator type="requiredstring"> 
     <param name="trim">true</param> 
     <message key="errors.required" /> 
    </field-validator>  
    <field-validator type="regex"> 
     <param name="regex">^[ a-zA-Z0-9'\-,.!:#@/]*$</param> 
     <message key="errors.invalidCharacter"/> 
    </field-validator> 
    <field-validator type="stringlength"> 
     <param name="maxLength">50</param> 
     <message key="errors.maxlength"></message> 
    </field-validator> 
</field> 

Любая помощь будет оценена, спасибо!

Вот запрашиваемая dirtyFlag() код (и связанной с кодом):

//needToConfirm used by confirm exit 
var needToConfirm = false; 

//default string message to display before leaving a page when data on the page has changed 
//these changes were made to allow the message displayed before exiting to be customized 
var defaultWarningMessage = "There is unsaved data on this screen. Do you want to exit anyway?"; 
var dirtyWarningMessage = defaultWarningMessage; 

//this line intercepts attempts to leave the page via clicking the X button. 
window.onbeforeunload = function() 
{ 
if (needToConfirm) 
{ 
    var outMessage = dirtyWarningMessage; 
    setDirtyWarningMessage(defaultWarningMessage); 
    return outMessage; 
} 
// no changes - return nothing    
} 

//function to set the string message to display before leaving a page when data on the page has changed 
function setDirtyWarningMessage(inMessage) 
{ 
dirtyWarningMessage = inMessage; 
} 

//function to set dirty flag 
function dirtyFlag() 
{ 
//alert ("Dirty flag set"); 
needToConfirm = true; 
} 

//function to clear dirty flag 
function clearDirtyFlag() 
{ 
//alert ("Dirty flag cleared"); 
needToConfirm = false; 
} 


//function to confirm close 
function confirmClose() 
{ 
if (needToConfirm) 
{ 
    var agree=confirm("Some data on the page is modified. Do you wish to leave the page without saving changes?"); 
    if (agree == true) 
    { 
     needToConfirm = false; 
     window.close(); 
    } 
    else 
    { 
     return false; 
    } 
} 
else 
{ 
    window.close(); 
} 
} 
+0

У вас есть ошибки проверки? –

+0

Да, сообщение «Фамилия требуется». отображается в верхней части страницы, если я оставляю поле «Фамилия» пустым, что я хочу. Но все, что я набрал в поле «Имя», потеряно. – ponder275

+0

Отправьте код для 'clearDirtyFlag()' и 'dirtyFlag()'. –

ответ

1

Угадайте что?

<s:textfield name = "firstName" 
       id = "firstName" 

      value = "" 

     maxlength = "50" 
      class = "form-control" 
     onchange = "dirtyFlag();" 
     tabindex = "4"/> 

value="" заставляет значение всегда быть пустым.

  • Использование value="%{firstName}" или
  • удалить его, и пусть name="firstName" сделать работу (рекомендуется).
+1

Не могу поверить, что я этого не видел. Я сравнивал его с кодом, который работал несколько раз и каждый раз пропускал его. Я бы дал вам +10, если бы это было разрешено. Благодаря! – ponder275

+0

Ну +10 недоступен, но ответ можно принять ... :) –

+1

Извините, я забыл галочку, и верхняя часть - отдельные элементы. – ponder275

 Смежные вопросы

  • Нет связанных вопросов^_^