كيفية جعل نموذج تقديم حين ان المقدمة على أساس القيمة في طلب خاصة بتطبيق الفول

StackOverflow https://stackoverflow.com/questions/1008727

  •  06-07-2019
  •  | 
  •  

سؤال

واكتشفت مشكلة في برنامجي قليلا، وايم أتساءل عما اذا كان أي شخص لديه أي نصائح أو المشورة بشأن كيفية حل هذه المشكلة على أفضل وجه ممكن.

ولدي testBean الفول الذي هو في نطاق الطلب. أنه يحتوي على ما يلي:

public class testBean {

private boolean internal = false; 
private String input = "";

public String internalTrue() {
    System.out.println("Set internal true");
    setInternal(true);
    return null;
}
public String submitForm() {
    System.out.println("");
    return null;
}
public boolean isInternal() {
    return internal;
}
public void setInternal(boolean internal) {
    this.internal = internal;
}
public String getInput() {
    return input;
}
public void setInput(String input) {
    this.input = input;
}

و}

وملفي welcomeJSF.jsp يحتوي هذا:

    <f:view>
        <h:form>
            <h:commandButton value="Set internal true" action="#{testBean.internalTrue}" />
        </h:form>
        <h:panelGrid columns="1" rendered="#{testBean.internal}">
            <h:form>
                <h:outputText value="JavaServer Faces" /><h:inputText value="#{testBean.input}" />
                <h:commandButton value="Go" action="#{testBean.submitForm}" />
            </h:form>
        </h:panelGrid>
    </f:view>

وعند تشغيل الطلب المقدم ايم مع زر "تعيين داخلية حقيقية". أنا فوقه وقدم ايم مع النموذج حيث لدي زر "الذهاب". بالنقر على "الذهاب" لا يؤدي الأسلوب في بلدي الفول، وعلى الأرجح بسبب الحقل الواقع لا يتم تقديمها على الخادم بعد الآن، وبالتالي فإنه لن تشغيل الأسلوب. هل هناك أي حلول ذكية لهذا؟

في وقت مبكر، شكرا على وقتك.

هل كانت مفيدة؟

المحلول

والأطفال من لوحة لن فك مدخلات لأن لها <م> المقدمة السمة يقيم دائما إلى <م> كاذبة خلال طلب القيم مرحلة التقديم. هذا هو الشيء المعقول القيام به من الناحية الأمنية.


<الفرعية> (المصدر: ibm.com )


وشيء واحد يمكن القيام به هو الاستفادة من حقيقة أن مكونات JSF الحفاظ على الدولة لعمر من رأي.

والفول الجديد:

public class TestBean {

  private String input = null;
  private UIComponent panel;

  public String internalTrue() {
    panel.setRendered(true);
    return null;
  }

  public String submitForm() {
    panel.setRendered(false);
    System.out.println("submitForm");
    return null;
  }

  public UIComponent getPanel() { return panel; }
  public void setPanel(UIComponent panel) { this.panel = panel; }

  public String getInput() { return input; }
  public void setInput(String input) { this.input = input; }

}

وجهة نظر جديدة منضمة إلى الفول:

  <f:view>
    <h:form>
      <h:commandButton value="Set internal true"
        action="#{testBean.internalTrue}" />
    </h:form>
    <h:panelGrid binding="#{testBean.panel}" columns="1"
      rendered="false">
      <h:form>
        <h:outputText value="JavaServer Faces" />
        <h:inputText value="#{testBean.input}" />
        <h:commandButton value="Go" action="#{testBean.submitForm}" />
      </h:form>
    </h:panelGrid>
  </f:view>

واستخدام ملزمة السمة على و<م> panelGrid سيتسبب <م> setPanel ليتم استدعاؤها عند إنشاء عرض / المستعادة.


ملاحظة قد تكون لديك بعض التجارب للقيام اعتمادا على كيفية تنفيذ الخاص بك و / أو المكتبات '<لأ href = "http://java.sun.com/javaee/5/docs/api/javax/faces/application /StateManager.html "يختلط =" نوفولو noreferrer "> StateManager مخازن وجهات النظر بين طلبات (والتي قد بدورها تتأثر <م> javax.faces.STATE_SAVING_METHOD المعلمة الحرف الأول). قد خزنها طريقة العرض في حقل مخفي في النموذج، في الدورة مرتبطا إلى معرف رأي (والتي قد تسبب التصادم مع نوافذ المتصفح متعددة)، في الدورة مرتبطا معرف فريد إنشاؤها بواسطة GET أو JSF الملاحة، أو عن طريق بعض آلية مخصصة تماما. طبيعة قابل للتوصيل من إطار يجعل من تنوعا، ولكن في هذه الحالة فهذا يعني أنك تحتاج إلى مضاعفة فحص كيف تتصرف التطبيق الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top